一、HBase与MapReduce整合
如何将海量数据导入到HBase表
开发MapReduce程序
HBase与MapReduce整合
## tsv格式的文件:用制表符‘\t’分割字段形成的文件
## csv格式的文件:用逗号','分割的字段形成的文件
##将HDFS上面的文件数据直接导入到Hbase
1.启动hbase
2)创建一张表
create 'teacher','info'
3)设置环境变量
export HBASE_HOME=/opt/modules/cdh/hbase-0.98.6-cdh5.3.6
export HADOOP_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6
export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`
##注意:设置的环境变量只在当前窗口有效
【永久生效方式:】
a.创建HBase的hbase-site.xml到Hadoop的conf目录
ln -s /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/conf/hbase-site.xml /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/etc/hadoop/hbase-site.xml
b.在Hadoop中添加 HBase jar
第一种:在hadoop-env.sh中添加HADOOP_CLASSPATH环境变量,value为HBase的lib文件夹下的所有jar包
if [ "$HADOOP_CLASSPATH" ];
then
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/*
else
export HADOOP_CLASSPATH=/opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/*
fi
第二种:在系统的profile或用户的环境变量文件*.profile文件内容中添加HADOOP_CLASSPATH
第三种:直接将HBase的lib目录中所有jar包复制到hadoop的share/hadoop/common/lib或者share/hadoop/mapreduce等目录中
4)主要使用到的jar包
##apache
yarn jar $HBASE_HOME/lib/hbase-server-0.98.6-hadoop2.jar
##cdh
$HADOOP_HOME/bin/yarn jar $HBASE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar
//执行导入命令
$HADOOP_HOME/bin/yarn jar /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex,info:address,info:phone teacher hdfs://hadoop.beifeng.com:8020/input/hbase/teacher.txt
//执行统计行数的命令
$HADOOP_HOME/bin/hadoop jar /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar rowcounter teacher
6)##先将hdfs文件转成habse的存储文件就是HFile文件,再导入hbase表
## 这种方式再加载海量数据时效率会更告,普遍使用
##先创建一个空表 teacher2
create 'teacher2','info'
##将hdfs文件转成HFile文件
$HADOOP_HOME/bin/yarn jar /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar importtsv -Dimporttsv.bulk.output=/user/hbase/ouput -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex,info:address,info:phone teacher2 hdfs://hadoop.beifeng.com:8020/input/hbase/teacher.txt
##将HFile文件加载到HBase表(completebulkload)
$HADOOP_HOME/bin/yarn jar /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar completebulkload /user/hbase/ouput teacher2
二、HBase和Hive整合 nosql
##HBase用来存储海量数据,而统计分析交给Hive来完成
1.##设置环境变量
$ export HIVE_HOME=/opt/modules/cdh/hive-0.13.1-cdh5.3.6
$ export HBASE_HOME=/opt/modules/cdh/hbase-0.98.6-cdh5.3.6
2.##设置软链接将HBase中的jar包供Hive使用(在hive的lib目录下设置hbase的jar包的软链接)
##CDH版本
ln -s $HBASE_HOME/lib/hbase-common-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-common-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-client-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-client-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-protocol-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-protocol-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-it-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-it-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/htrace-core-2.04.jar $HIVE_HOME/lib/htrace-core-2.04.jar
ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-hadoop2-compat-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-hadoop-compat-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-hadoop-compat-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/high-scale-lib-1.1.1.jar $HIVE_HOME/lib/high-scale-lib-1.1.1.jar
3.启动hive 并创建表
$ bin/hive --service hiveserver2 &
bin/hive --service metastore &
CREATE TABLE hive2hbase_emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno")
TBLPROPERTIES ("hbase.table.name" = "emp");
##从已有的hive表中将数据导入到hive2hbase_emp
insert into table hive2hbase_emp select * from db0801.emp;
##注意:不能直接加载数据到hive2hbase_emp
三、HBase与 Sqoop整合
将mysql中的数据导入到hbase
## 在mysql中创建一张表
##修改sqoop-env.sh配置
export HBASE_HOME=/opt/modules/cdh/hbase-0.98.6-cdh5.3.6
##执行sqoop导入数据
bin/sqoop import \
--connect jdbc:mysql://hadoop.beifeng.com:3306/test \
--username root \
--password root123 \
--table so_detail \
--columns "id,order_id,product_id" \
--column-family "info" \
--hbase-create-table \
--hbase-row-key "id" \
--hbase-table "so_detail_hbase" \
--num-mappers 1 \
--split-by id
如何将海量数据导入到HBase表
开发MapReduce程序
HBase与MapReduce整合
## tsv格式的文件:用制表符‘\t’分割字段形成的文件
## csv格式的文件:用逗号','分割的字段形成的文件
##将HDFS上面的文件数据直接导入到Hbase
1.启动hbase
2)创建一张表
create 'teacher','info'
3)设置环境变量
export HBASE_HOME=/opt/modules/cdh/hbase-0.98.6-cdh5.3.6
export HADOOP_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6
export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`
##注意:设置的环境变量只在当前窗口有效
【永久生效方式:】
a.创建HBase的hbase-site.xml到Hadoop的conf目录
ln -s /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/conf/hbase-site.xml /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/etc/hadoop/hbase-site.xml
b.在Hadoop中添加 HBase jar
第一种:在hadoop-env.sh中添加HADOOP_CLASSPATH环境变量,value为HBase的lib文件夹下的所有jar包
if [ "$HADOOP_CLASSPATH" ];
then
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/*
else
export HADOOP_CLASSPATH=/opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/*
fi
第二种:在系统的profile或用户的环境变量文件*.profile文件内容中添加HADOOP_CLASSPATH
第三种:直接将HBase的lib目录中所有jar包复制到hadoop的share/hadoop/common/lib或者share/hadoop/mapreduce等目录中
4)主要使用到的jar包
##apache
yarn jar $HBASE_HOME/lib/hbase-server-0.98.6-hadoop2.jar
##cdh
$HADOOP_HOME/bin/yarn jar $HBASE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar
//执行导入命令
$HADOOP_HOME/bin/yarn jar /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex,info:address,info:phone teacher hdfs://hadoop.beifeng.com:8020/input/hbase/teacher.txt
//执行统计行数的命令
$HADOOP_HOME/bin/hadoop jar /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar rowcounter teacher
6)##先将hdfs文件转成habse的存储文件就是HFile文件,再导入hbase表
## 这种方式再加载海量数据时效率会更告,普遍使用
##先创建一个空表 teacher2
create 'teacher2','info'
##将hdfs文件转成HFile文件
$HADOOP_HOME/bin/yarn jar /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar importtsv -Dimporttsv.bulk.output=/user/hbase/ouput -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex,info:address,info:phone teacher2 hdfs://hadoop.beifeng.com:8020/input/hbase/teacher.txt
##将HFile文件加载到HBase表(completebulkload)
$HADOOP_HOME/bin/yarn jar /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-server-0.98.6-cdh5.3.6.jar completebulkload /user/hbase/ouput teacher2
二、HBase和Hive整合 nosql
##HBase用来存储海量数据,而统计分析交给Hive来完成
1.##设置环境变量
$ export HIVE_HOME=/opt/modules/cdh/hive-0.13.1-cdh5.3.6
$ export HBASE_HOME=/opt/modules/cdh/hbase-0.98.6-cdh5.3.6
2.##设置软链接将HBase中的jar包供Hive使用(在hive的lib目录下设置hbase的jar包的软链接)
##CDH版本
ln -s $HBASE_HOME/lib/hbase-common-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-common-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-client-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-client-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-protocol-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-protocol-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-it-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-it-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/htrace-core-2.04.jar $HIVE_HOME/lib/htrace-core-2.04.jar
ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-hadoop2-compat-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-hadoop-compat-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-hadoop-compat-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/high-scale-lib-1.1.1.jar $HIVE_HOME/lib/high-scale-lib-1.1.1.jar
3.启动hive 并创建表
$ bin/hive --service hiveserver2 &
bin/hive --service metastore &
CREATE TABLE hive2hbase_emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno")
TBLPROPERTIES ("hbase.table.name" = "emp");
##从已有的hive表中将数据导入到hive2hbase_emp
insert into table hive2hbase_emp select * from db0801.emp;
##注意:不能直接加载数据到hive2hbase_emp
三、HBase与 Sqoop整合
将mysql中的数据导入到hbase
## 在mysql中创建一张表
##修改sqoop-env.sh配置
export HBASE_HOME=/opt/modules/cdh/hbase-0.98.6-cdh5.3.6
##执行sqoop导入数据
bin/sqoop import \
--connect jdbc:mysql://hadoop.beifeng.com:3306/test \
--username root \
--password root123 \
--table so_detail \
--columns "id,order_id,product_id" \
--column-family "info" \
--hbase-create-table \
--hbase-row-key "id" \
--hbase-table "so_detail_hbase" \
--num-mappers 1 \
--split-by id