sqoop ##sqoop命令
import ##表示导入
--connect jdbc:mysql://ip:3306/sqoop ##告诉jdbc,连接mysql的url
--username root ##连接mysql的用户名
--password admin ##连接mysql的密码
--table aa ##从mysql导出的表名称
--target-dir /xxx/yyy ##指定导入位置
--fields-terminated-by '\t' ##指定输出文件中的行的字段分隔符
-m 1 ##复制过程使用1个map作业
##后面为注释,所有命令不得换行!
--target-dir若不指定会将表导入到hdfs默认路径/user/root路径下
1、显示mysql数据库中的database
sqoop list-databases --connect jdbc:mysql://hadoop0:3306/ --username root --password admin
2、
sqoop import --connect jdbc:mysql://hadoop0:3306/test --username root --password admin --table NewTable --hive-import -m 1
会将表导入到hive-site.xml中设定的warehourse目录下
mysql中数据库test下,有个表名为‘NewTable'的表。
sqoop操作过程如下:
数据已经上传至hive中:
默认复制一份:
其中的内容:
4、也可以使用hive进行查看。如下所示
hive使用mysql引擎,可以执行sql语句,show databases;显示数据库。有个默认数据库defaul,并且默认表存入该数据库中。
show tables;显示表。
查看表中数据:
3、把数据从hdfs导出到mysql中
sqoop
export ##表示数据从hive复制到mysql中
--connect jdbc:mysql://192.168.1.113:3306/test
--username root
--password admin
--table bb ##mysql中的表,即将被导入的表名称
--export-dir '/user/root/aa/part-m-00000' ##hive中被导出的文件
--fields-terminated-by '\t' ##hive中被导出的文件字段的分隔符
4、错误1:
除hadoop0外其他虚拟机连接mysql失败。因为在之前10、hive安装的配置过程中,赋予权限错误。
进入mysql, mysql -u root -p-->输入密码
grant all privileges on *.* to 'root'@'hadoop0' identified by 'root';
将'root'@'hadoop0'改为'root'@'%',表示任何机器均可使用root账号进行连接。
5、4修改后出现新错误2:
进入HIVE_HOME/conf文件夹,修改hive-site.xml文件。
将之前的localhost修改为hadoop0。程序正常运行。
6、结果:
结果会存入hive的warehouse文件夹下。5进行修改前,数据也能读出,但是存在于root/user/newtable下。表示临时文件,数据从mysql读出成功,但是写入hive时出现错误。
7,若两次执行相同的import命令,会报错如下:
默认将数据上传到hdfs的/user/root/文件夹下
可以使用--warehouse-dir命令指定位置,示例如下
sqoop import --connect jdbc:mysql://localhost:3306/spark --username root --password root --table sparkjdbc --fields-terminated-by '\t' --warehouse-dir /tttt -m 1