Hive/hbase/sqoop的基本使用教程~
###Hbase基本命令
start-hbase.sh #启动hbase
hbase shell #进入hbase编辑命令
list #列出当前所有的表(tablename)
create 'test','name' #创建一张名为test的表,并且表中只有一列 name
put 'test','row1','name:zhangsan','zs' #往test表中插入数据,行标识为row1
put 'test','row2','name:lisi','ls' #往test表中插入数据,行标识为row2
插入数据时,行标识可以相同,例如:
put 'test','row1','name:zhangsan','zs'
put 'test','row1','name:zhangsan1','zs1' #两条数据都存入数据库
如果行标识相同,列数据也相同时 后面的value值会被覆盖
put 'test','row1','name:zhangsan','zs'
put 'test','row1','name:zhangsan','ls' #只会有一条数据,value值为ls的存入数据库
scan 'test' ##查看当前test表中数据信息
get 'test','row1' #查看test表中行标识为row1的数据信息
delete 'test','row1','name:zhangsan' #删除行标识为row1,name:zhangsan 的数据
disable 'test' #禁用test表
drop 'test' #删除test表
exit #退出hbase shell
#HIVE UDF 用户自定义函数
1、创建maven项目,pom.xml引入如下依赖:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.imodule.hive</groupId>
<artifactId>hivedemo</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.3.3</version>
</dependency>
</dependencies>
</project>
2、编写Java类,继承 org.apache.hadoop.hive.ql.exec.UDF类 #一个类中可以有多个方法,但是方法名必须为 evaluate,可以进行重载
public class HiveApplication extends UDF
package com.imodule.hive.hivedemo; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.hive.ql.udf.UDFSin; import org.apache.hadoop.io.Text; /** * Hello world! * */ public class HiveApplication extends UDF { public Text evaluate(String text){ if(text != null){ return new Text("hello,mygirl"+text); }else{ return new Text("hello,mygirl"); } } public Text evaluate(String text,String OBJ,int inta){ return new Text(text+OBJ+Integer.valueOf(inta)); } }
3、在类中定义函数 ##注意方法名一定要为 evaluate ,入参和出参可以自定义
public Text evaluate(String text){ if(text != null){ return new Text("hello,mygirl"+text); }else{ return new Text("hello,mygirl"); } }
4、将maven项目打包为jar包
mvn clean install
5、在linux上输入hive命令,启动hive
***生成临时函数,会话级别的调用
>hive #进入hive
>add jar /home/imodule/hivedemo-1.0.jar; #上传jar包
>create temporary function myfun as 'com.imodule.hive.hivedemo.HiveApplication'; #取函数调用的别名 myfun
>select mname ,myfun(mname) from m_user1; #调用函数 ps:调用的时候需要使用数据去一一对应方法的参数类型个数 evaluate(String text)
>select 'username',myfun('zs') from m_user1;
>select mname ,myfun(mname,mname,mid) from m_user1; #调用函数 ps:调用的时候需要使用数据去一一对应方法的参数类型以及个数 evaluate(String text,String OBJ,int inta)
***生成永久函数,随时都可以调用
>hadoop dfs -mkdir /user/imodule/hive_jars #在hdfs文件系统中创建文件目录 hive_jars
>hadoop dfs -put /home/imodule/hivedemo-1.0.jar /user/imodule/hive_jars/ #将jar上传到hdfs文件系统
>hive #进入hive
>create function myfun as 'com.imodule.hive.hivedemo.HiveApplication' using jar 'hdfs://SHDCL40111:9000//user/imodule/hive_jars/hivedemo-1.0.jar'; #引用hdfs文件系统的jar创建永久函数
>select mname ,myfun(mname) from m_user1; #调用函数 ps:调用的时候需要使用数据去一一对应方法的参数类型个数 evaluate(String text)
HIVE的基本操作:
hive #进入hive命令编辑界面
show databases; #查看所有的库
show tables; #查看当前库中的所有的表
create database test; #创建数据库名为test
create table user1(id int,name String); #创建一个只有ID,name两个字段的表,hive还可以创建分区表,外部表啥的,这里只演示一个最简单的哈
insert into user1 values(1,'zs'); #往表中插入数据
select * from user1; #查看表中的数据
insert overwrite table user1 select * from user1 where XXX; #这是删除操作,xxx是你想保留的数据的条件。
insert overwrite table user1 select * from user1 where 1=0; #删除user1表中的所有数据
drop table user1 ; #删除表
###hadoop执行jar的命令:
hadoop jar hadoopDemo-2.7.7.jar /input /output_tmp
hadoop dfs -mkdir /input #在hdfs文件系统中创建文件目录 /input
hadoop dfs -put file.txt /input #将本地的file.txt文件上传到hadoop的hdfs文件系统
hadoop dfs -get /input/* #从hadoop系统中下载input目录下的所有文件到本地
hadoop dfs -rmr /input/* #删除hadoop的hdfs文件系统中的 input目录下的所有文件
###sqoop从mysql库中导入数据到hive库
sqoop import \
--connect jdbc:mysql://10.28.85.148:3306/data_mysql2hive?useSSL=false \
--username root \
--password Abcd1234 \
--table m_user2 \
-m 1 \
--hive-import \ #导入hive库命令
--create-hive-table \ #创建hive表命令
--hive-table m_user2 #命名hive库中的表名为 m_user2
###测试sqoop的连接
sqoop list-databases \
--connect jdbc:mysql://10.28.85.148:3306/data_mysql2hive \
--username root \
--password Abcd1234