1.4 使用Sqoop从MySQL数据库导入数据到HDFS

时间:2022-03-28 07:35:51

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

1.4 使用Sqoop从MySQL数据库导入数据到HDFS

更改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

1.4 使用Sqoop从MySQL数据库导入数据到HDFS

实验过程

sqoop import -m 1 --connect jdbc:mysql://namenode:3306/logs --username root --password hadoop --table weblogs --target-dir /data/weblogs/impor

1.4 使用Sqoop从MySQL数据库导入数据到HDFS

对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中的那个位置