在Hive中,使用以下方式进行数据的导入
1、使用Hive命令导入数据
load data [local] inpath 'filepath'
overwrite into table tablename [partition(xx='yy')];
当有local时,说明是从操作系统中进行文件的读取,否则是从HDFS中读取;overwrite代表是否覆盖原有记录。
2、使用Sqoop进行操作
下载Sqoop,解压,因为Sqoop和Hadoop相关,所以进行如下设置:
export HADOOP_COMMON_HOME=/opt/modules/hadoop-2.2.0
export HADOOP_MAPRED_HOME=/opt/modules/hadoop-2.2.0
首先把mysql的驱动jar包上传到Sqoop的lib目录下。
a:使用Sqoop导入Mysql数据到HDFS中
./sqoop import --connect jdbc:mysql://192.168.6.1/test --username root --password root --table user --columns 'username,password' -m 1 --target-dir '/user/emp'
b:使用Sqoop导入Mysql数据到Hive中,使用默认的表名,和源表名相同
./sqoop import --hive-import --connect jdbc:mysql://192.168.6.1/test --username root --password root --table user -m 1 --columns 'username,password'
指定了导入的列,否则全列导入。
c:使用Sqoop导入Mysql数据到Hive中,指定表名
./sqoop import --hive-import --connect jdbc:mysql://192.168.6.1/test --username root --password root --table user -m 1 --columns 'username,password' --hive-table user2
d:使用Sqoop导入Mysql数据到Hive中,指定表名,使用where条件
./sqoop import --hive-import --connect jdbc:mysql://192.168.6.1/test --username root --password root --table user -m 1 --columns 'username,password' --hive-table user2 --where 'username=yy'
e:使用Sqoop导入mysql数据到Hive中,并使用查询语句
源表名不需要指定,因为增加了查询语句
./sqoop import --hive-import --connect jdbc:mysql://192.168.6.1/test --username root --password root -m 1 --query 'select * from user where id<10 and $CONDITIONS' --target-dir '/user/user2' --hive-table user2
f:使用Sqoop将Hive中数据导入到Mysql中
首先表user_dest在mysql中创建好:
./sqoop import --hive-import --connect jdbc:mysql://192.168.6.1/test --username root --password root -m 1 --table user_dest --export-dir 'HDFS中文件路径'