1.4 使用Sqoop从MySQL数据库导入数据到HDFS
先将weblog_entries.txt放入/var/lib/mysql/path/下
mkdir /var/lib/mysql/path/
cp /home/data/weblog_entries.txt /var/lib/mysql/path/weblog_entries.txt
注:以下命令都是在namenode节点运行的
实验准备
在mysql中创建数据库和表,并插入数据
1.登录mysql
mysql -uroot -phadoop
2.创建新的数据库
CREATE DATABASE logs;
3.选择logs数据库
USE logs;
4.创建weblogs表
CREATE TABLE weblogs (
md5 VARCHAR(32),
url VARCHAR(64),
request_date DATE,
request_time TIME,
ip VARCHAR(15)
);
5.往 weblogs表插入数据
LOAD DATA INFILE './path/weblog_entries.txt' INTO TABLE weblogs
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';
书中 最后是 ‘\t\n’ 但是这样只能导入一行,最后将‘\t’去掉,导入3000条信息
6.查询下插入的数据量(应该有3000条)
select count(*) from weblogs;
更改配置
更改mysql的my.cnf 文件
vim /etc/mysql/my.cnf
找到以下语句,注释掉(在最前面加一个 # )
bind-address = 127.0.0.1
然后在关键字[mysqld]添加以下语句
skip-external-locking
skip-name-resolve
skip-grant-tables
最后 保存退出,然后重启下mysql
/etc/init.d/mysql restart
更改Hdfs的hdfs-site.xml 文件
vim /etc/hadoop-0.20/conf/hdfs-site.xml
添加以下语句
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
最后 保存退出
注:每个节点的hdfs-site.xml都要这样修改,然后重启hadoop服务
更改sqoop的hdfs-site.xml 文件
vim /usr/lib/sqoop/bin/configure-sqoop
将以下语句注释掉
if [ ! -d "${HBASE_HOME}" ]; then
echo "Warning: $HBASE_HOME does not exist! HBase imports will fail."
echo 'Please set $HBASE_HOME to the root of your HBase installation.'
fi
实验过程
sqoop import -m 1 --connect jdbc:mysql://namenode:3306/logs --username root --password hadoop --table weblogs --target-dir /data/weblogs/impor
对sqoop进行个人解析,会有解析不到位的地方,还请大家指出来
sqoop import -m 1 –connect 这个是固定语句
jdbc:mysql://namenode:3306/logs 这里面 namenode:3306 是指mysql安装的主机,logs 是使用到的数据库
–username root 这里的root是登录mysql的账号
–password hadoop 这里的hadoop是登录mysql的密码
–table weblogs 这里的weblogs 是需要导入到HDFS的表名
–target-dir /data/weblogs/impor 这里的 /data/weblogs/impor 是数据导入到HDFS中的那个位置