版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HBase安装与配置主讲:李强任务描述HBase分布式数据库需要运行在Hadoop完全分布式集群和ZooKeeper分布式协调服务框架上,所以在本任务中,完成该组件的基本安装后,主要是针对Hadoop集群及ZooKeeper集群的相关属性配置,以及HBase本身的集群框架部署。任务分析由于Hadoop版本和HBase版本之间的兼容性问题,如果是Hadoop2.7.7版本基本与目前HBase的各版本均兼容,但是Hadoop3.1.4版本只兼容HBase2.3.X和HBase2.4.X,所以本项目选择HBase2.4.11版本部署。6.1.1master节点安装HBase组件1.解压安装文件本手册所使用的版本是HBase2.4.11,可以从HBase官网下载。下载好的安装包都需上传到指定目录下,本手册指定为/root/目录,使用ls/root/命令可以查看上传的安装包(具体上传方式请参考项目1),如图6-1所示。图6-1查看安装包1.解压安装文件使用tar命令解压HBase到/usr/local/src文件夹,并切换到安装目录下查看,可以使用ls查看解压后的效果,如代码6-1所示,效果如图6-2所示。代码6-1解压安装包图6-2查看解压好的安装包tar-zxvfhbase-2.4.11-bin.tar.gz-C/usr/local/src/ls/usr/local/src/2.修改文件夹名称由于解压后的文件夹名称带有比较复杂的版本号,为了简化后续配置,此处修改文件夹名称。使用mv命令将解压的hbase-2.4.11目录重命名为hbase,如代码6-2所示,效果如图6-3所示。代码6-2重命名文件夹图6-3重命名文件夹mv/usr/local/src/hbase-2.4.11/usr/local/src/hbasels3.修改环境变量文件为了可以在任何目录下直接执行HBase的相关命令,可以在环境变量文件中添加HBase的环境变量。参考项目2,使用vi/root/.bash_profile将如表6-1所示的配置信息添加到/root/.bash_profile文件的末尾,保存退出。表6-1环境变量文件的添加内容#setHBaseenvironmentexportHBASE_HOME=/usr/local/src/hbaseexportPATH=$HBASE_HOME/bin:$PATH4.生效用户环境变量文件在master节点上运行如代码6-3所示的命令,使master节点上配置的HBase的环境变量生效。代码6-3master节点生效环境变量source/root/.bash_profile6.1.2master节点修改配置文件1.修改hbase-env.sh配置文件hbase-env.sh是HBase执行时去加载Hadoop环境变量和ZooKeeper的配置文件,用于指定Hadoop环境变量和ZooKeeper配置,修改文件内容,如代码6-4所示。代码6-4修改hbase-env.sh文件cd/usr/local/src/hbase/conf/vihbase-env.sh该文件中需要修改三处设置:首先是JAVA_HOME需要设置为项目1中安装java的路径;同时将HBase_CLASSPATH配置为项目2中安装的Hadoop路径;HBase_MANAGES_ZK在配置文件偏后的位置,读者需要自行查找,其默认值为true表示使用HBase自带的ZooKeeper,需要改为false表示使用在Hadoop上装的ZooKeeper服务。另外请注意将配置项前面的“#”去掉,具体设置参考内容,如表6-2所示。表6-2文件的添加内容exportJAVA_HOME=/usr/local/src/java#修改Java安装位置exportHBASE_CLASSPATH=/usr/local/src/hadoop/etc/hadoop/#修改HBase类路径exportHBASE_MANAGES_ZK=false#修改true为falseexportHBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"#去掉前面的#2.修改hbase-site.xml配置文件hbase-site.xml是HBase集群运行必须的核心配置文件,用于配置Hadoop集群相关和ZooKeeper集群相关的属性,修改文件,如代码6-5所示。代码6-5修改hbase-site.xmlcd/usr/local/src/hbase/conf/vihbase-site.xml2.修改hbase-site.xml配置文件可以将文件中<configuration>和</configuration>一对标签之间的配置项内容先删除,然后追加配置信息,如表6-3所示,保存退出。表6-3HBase-site.xml配置文件的修改内容<property><name>hbase.rootdir</name><value>hdfs://master:9000/hbase</value>#使用9000端口</property><property><name>.port</name><value>60010</value>#使用master节点60010端口</property><property><name>hbase.ZooKperty.clientPort</name><value>2181</value>#使用master节点2181端口</property>......省略2.修改hbase-site.xml配置文件该文件需要添加的配置项参数,如表6-4所示。表6-3HBase-site.xml配置文件的修改内容序号配置项默认值修改值1hbase.rootdir${hbase.tmp.dir}/HBasehdfs://master:9000/hbase2.port16000600103hbase.ZooKperty.clientPortlocalhost21814ZooKeeper.session.timeout600001200005hbase.ZooKeeper.quorumlocalhostmaster,slave1,slave26hbase.tmp.dirjava.io.tmpdir/HBase−{}/usr/local/src/hbase/tmp7hbase.cluster.distributedfalsetrue3.创建临时数据文件夹由于在上面的配置文件中配置了HBase的临时文件夹信息,使用如代码6-6错误!未找到引用源。所示的命令创建临时文件夹目录。代码6-6创建文件夹文件mkdir/usr/local/src/hbase/tmp4.修改regionservers文件可以将文件中<configuration>和</configurataregionservers文件中标识HBase集群中的从节点,使用“viregionservers”删除该文件中原有“localhost”内容,在文件中追加配置信息,如表6-5所示,保存退出。ion>一对标签之间的配置项内容先删除,然后追加配置信息,如表6-3所示,保存退出。请注意:regionservers文件中添加的内容结尾不允许有空格,文件中不允许有空行。表6-3HBase-site.xml配置文件的修改内容slave1slave26.1.3在Slave节点安装HBase1.同步配置文件到Slave节点将master上配置好的HBase文件夹内容和环境变量文件分别分发到slave1和slave2节点,分发命令,如代码6-7所示。代码6-7分发HBase配置scp-r/usr/local/src/hbaseslave1:/usr/local/src/scp-r/usr/local/src/hbaseslave2:/usr/local/src/scp/root/.bash_profileslave1:/root/scp/root/.bash_profileslave2:/root/2.生效用户环境变量文件在每个节点上运行如代码6-8所示的命令,使每个节点上配置的HBase的环境变量生效。代码6-8Slave节点生效环境变量文件source/root/.bash_profile6.1.4启动HBase集群启动HBase集群启动HBase之前,需要先启动Hadoop集群、ZooKeeper集群。请读者自行确定是否启动了Hadoop和ZooKeeper集群(参考项目2和项目5)。启动HBase之前,先用jps查看master和slave1的Java进程情况,如图6-4、图6-5所示。图6-4HBase启动前master进程图6-5HBase启动前slave1进程启动HBase集群接下来在master节点启动HBase,如代码6-9所示,并查看Java进程。代码6-9启动hbase代码start-hbase.sh启动后过程提示如图6-6所示,能看到分别在三个节点启动了HBase。图6-6HBase启动过程启动HBase集群现在用jps分别在查看master和slave1的Java进程情况,如图6-7、图6-8所示,发现master节点多了一个HMaster进程;slave1节点中多了HRegionServer进程(slave2类似)。图6-7HBase启动后master进程图6-8HBase启动后slave1进程启动HBase集群也可以浏览器中输入81:60010/,出现HBase的WebUI界面效果,如图
6-9所示。如果要关闭HBase,可以在master节点执行stop-hbase.sh命令关闭。至此,HBase的安装与配置成功完成。图6-9HBase启动后WebUI效果谢谢HBaseShell基本操作主讲:李强任务描述本任务主要完成基于Linux环境,在Hadoop集群掌握HBaseShell命令的使用的工作。通过完成本实验任务,要求学生熟练掌握HBaseShell命令的使用的方法,为后续实验的开展奠定HBase平台基础。任务分析HBase是一个面向列的分布式数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。所以HBase的Shell操作在过程上与Hive类似,但是具体的语法却有较大的区别。在本任务中,主要在HBaseShell中,体验下面向列的模式进行数据表的管理和数据的管理基本操作。6.2.1HBaseShell应用1.启动HBaseShell和退出HBaseShell在主节点master进入HBase的命令行模式。执行“hbaseshell”命令,效果如图6-10所示。图6-10HBase启动后的Shell窗口完成了HBase中相关的操作后,输入exit或者quit即可退出HBaseShell。2.常见错误启动HBaseShell时,因为版本之间兼容性问题,容易出现程序包冲突的错误,效果如图
6-11所示。图6-11常见错误图示3.解决方案进入master节点的/usr/local/src/hbase/lib/client-facing-thirdparty目录,查看到如图6-12所示中的两个程序包,可以删除,也可以改名备份。在此进行改名备份,如代码6-10所示。代码6-10Jar文件改名备份图6-12需要替换的程序包cd/usr/local/src/hbase/lib/client-facing-thirdpartymvslf4j-api-1.7.33.jarslf4j-api-1.7.33.jar.bakmvslf4j-reload4j-1.7.33.jarslf4j-reload4j-1.7.33.jar.bak进入master节点的/usr/local/src/hadoop/share/hadoop/common/lib/目录,通过“lsslf*”查看以slf开头的程序包,如图6-13所示。图6-13Hadoop版本Jar3.解决方案在此进行复制这两个以slf开头的程序包到HBase的lib文件夹,如代码6-11所示,请特别注意需要查询本地安装包的中的程序包的版本号,根据查询结果修改版本号,否则执行复制会出错。代码6-11jar复制cd/usr/local/src/hadoop/share/hadoop/common/lib/cpslf4j-log4j12-1.7.25.jar/usr/local/src/hbase/lib/client-facing-thirdparty/cpslf4j-api-1.7.25.jar/usr/local/src/hbase/lib/client-facing-thirdparty/执行以上操作后,需要重新启动HBase服务,如代码6-12所示,再次启动HBaseShell就可以了。代码6-12重启HBasestop-hbase.shstart-hbase.shhbaseshell6.2.2HBase数据表操作1.创建表对于学生基本信息表,包含三个列族:sid、sname、sage。创建student表,包含前两个列族,并查看表结构,如代码6-13所示,效果如图6-14所示。代码6-13HBase创建表案例create'student',{NAME=>'sid'},{NAME=>'sname'}describe'student'图6-14HBase创建表对象2.修改表可以通过修改表结构的方式在表中添加sage这个列族,新增列族,并查看表结构,如代码6-14所示,效果如图6-15所示。代码6-14HBase创建表案例alter'student',{NAME=>'sage'}describe'student'图6-15HBase修改表对象3.删除表如果表不需要了可以删除,但是删除之前应该先执行disable操作,再删除表对象,如代码6-15所示。代码6-15HBase创建表案例disable'student'drop'student'6.2.3HBase数据操作1.创建表对象创建student表对象如代码6-16所示,如果student表对象没有删除,可以略过本步骤。代码6-16HBase创建表案例create'student',{NAME=>'sid'},{NAME=>'sname'},{NAME=>'sage'}describe'student'图6-16表结构查询2.添加数据将项目4的4.3.3小节中测试的三条数据添加到HBase表中,HBase的数据新增命令为put,而且是一个列一个列地增加数据,新增数据如代码6-17所示。代码6-17HBase新增数据put'student','rk1','sid','1'put'student','rk1','sname','张三'put'student','rk1','sage','19'put'student','rk2','sid','2'put'student','rk2','sname','李四'put'student','rk2','sage','18'put'student','rk3','sid','3'put'student','rk3','sname','王五'put'student','rk3','sage','20'3.查询全表数据查询表中的所有数据,HBase的查询所有数据的命令为scan,查询student数据如代码6-18所示,效果如图6-17所示。代码6-18HBase查看表数据scan'student',{FORMATTER=>'toString'}图6-16表结构查询从图6-17可以看出,HBase数据表中的数据与一般的关系型数据库的数据结构不一样,每一个学生用行标识来表示,然后每一个列族具有列名、列值和时间戳(数据版本)。如果要修改其中某列数据,可以直接像新增列值一样进行操作即可,对于同一行的同一个列的值的修改实际上是新增加一个版本的数据,以put的时间戳作为版本,并显示最新的版本数据,这样达到修改的功能。4.删除数据如果要删除某列的数据,需要使用delete命令,指定对应表名,行标识以及列名。例如,删除rk3行的年龄sage列值,如代码6-19所示。代码6-19HBase删除列案例delete'student','rk3','sage'scan'student'图6-18删除列值后效果删除列值后再查询全表数据会发现没有了这项值,效果如图6-18所示。5.带条件查询查询数据除了可以使用scan查看全表外,也可以指定列或者进行条件查询,查询sid列值,如代码6-20所示,效果如图6-19所示。代码6-20HBase查看表数据scan'student',{COLUMNS=>'sid'}图6-19指定列查询谢谢手游信息数据存储设计主讲:李强任务描述客户是一个互联网手机游戏平台,需要针对广大手游用户进行手游产品的统计分析,需要存储每个手游用户即客户对每个手游产品的关注度(游戏热度),且存储时间维度上的关注度信息,从而能针对客户的喜好进行挖掘并进行类似精准营销的手游定点推送,广告营销等业务,从而扩大该平台的用户量并提升用户粘着度。根据上述客户需求,本案例将会创建HBase数据库表结构,用于记录用户关注的手游、手游被哪些用户关注、用户每天对手游产品的使用记录、用户每日使用手游次数统计这4项信息。任务分析本小节任务将首先创建用户关注手游信息表、手游被关注信息表、用户手游使用记录表、用户手游日使用次数统计表、用户手游日使用次数统计表这4张HBase数据库表结构,然后所创建的4张HBase数据库表结构,需完成如下业务逻辑。(1)当用户关注手游时,需要将信息记录到用户关注手游信息表和手游被关注信息表。(2)当用户使用手游时,需要将使用记录记录到用户手游使用记录表。(3)查看某手游被关注的情况。(4)统计用户每天使用手游的次数,将结果存储到用户手游日使用次数统计表。6.3.1设计表结构设计表结构表6-6用户关注手游信息表编号项目项目内容说明1RowKeyuser_id用户ID2列族games
3列名games_id手游ID4值文本内容手游名称编号项目项目内容说明1RowKeygames_id手游ID2列族user
3列名user_id用户ID4值user_id用户ID表6-6用户关注手游信息表表6-6用户关注手游信息表表6-6用户关注手游信息表编号项目项目内容说明1RowKeyuser_id_timestamp用户ID+使用开始时间2列族degee
3列名games_id手游ID4值1表示使用1次编号项目项目内容说明1RowKeyuser_id_ymd用户ID+使用日期2列族degee
3列名games_id手游ID4值gamecounts使用次数6.3.2创建表结构创建表结构参考项目3,打开IDEA,创建名为hbase_mobilegame的工程,在src/main/resources目录下添加Hadoop配置文件core-site.xml和hdfs-site.xml,在pom.xml文件添加所需依赖,如表6-10所示,添加完成后加载依赖。图6-11常见错误图示<dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.1.4</version></dependency>......省略创建表结构在src/main/java目录下创建名为createtable的package,在createtable包内创建CreateTable.java,在main方法外定义一些全局变量,包括所需的4张表结构的表名、Configuration对象conf、Connection对象conn,内容如代码6-21所示。代码6-21CreateTable.javapublicclassCreateTable{privatestaticfinalbyte[]USERFOLLOWS="userfollows".getBytes();privatestaticfinalbyte[]GAMEFOLLOWS="gamefollows".getBytes();privatestaticfinalbyte[]USAGERECORDS="usagerecords".getBytes();privatestaticfinalbyte[]USAGECOUNT="usagecount".getBytes();privatestaticConfigurationconf;privatestaticConnectionconn;publicstaticvoidmain(String[]args){}}创建表结构根据如表6-6所示的表结构设计,在main方法外创建方法initUserfollows(),用于创建用户关注手游信息表,如代码6-22所示。代码6-22创建用户关注手游信息表privatestaticvoidinitUserfollows()throwsIOException{//创建AdminAdminadmin=conn.getAdmin();//创建表描述器HTableDescriptoruserfollowsHTableDescriptor=newHTableDescriptor(TableName.valueOf(USERFOLLOWS));//创建列簇描述器HColumnDescriptorgamesHColumnDescriptor=newHColumnDescriptor("games");userfollowsHTableDescriptor.addFamily(gamesHColumnDescriptor);//创建表if(admin.tableExists(TableName.valueOf(USERFOLLOWS))){......省略创建表结构根据如表6-7所示的表结构设计,在main方法外创建方法initGamefollows(),用于创建手游被关注信息表,如代码6-23所示。代码6-23创建手游被关注信息表privatestaticvoidinitGamefollows()throwsIOException{//创建AdminAdminadmin=conn.getAdmin();TableNametableName=TableName.valueOf(GAMEFOLLOWS);//创建表描述器HTableDescriptorgamefollowsHTableDescriptor=newHTableDescriptor(tableName);//创建列簇描述器HColumnDescriptorusersHColumnDescriptor=newHColumnDescriptor("users");gamefollowsHTableDescriptor.addFamily(usersHColumnDescriptor);//创建表......省略创建表结构根据如表6-8所示的表结构设计,在main方法外创建方法initUsagerecords(),用于创建用户手游使用记录表,如代码6-24所示。代码6-24创建用户手游使用记录表privatestaticvoidinitUsagerecords()throwsIOException{//创建AdminAdminadmin=conn.getAdmin();TableNametableName=TableName.valueOf(USAGERECORDS);//创建表描述器HTableDescriptorusagerecordsHTableDescriptor=newHTableDescriptor(tableName);//创建列簇描述器HColumnDescriptordegeeHColumnDescriptor=newHColumnDescriptor("degee");usagerecordsHTableDescriptor.addFamily(degeeHColumnDescriptor);//创建表......省略创建表结构根据如表6-9所示的表结构设计,在main方法外创建方法initUsagecount(),用于创建用户手游日使用次数统计表,如代码6-25所示。代码6-25创建用户手游日使用次数统计表privatestaticvoidinitUsagecount()throwsIOException{//创建AdminAdminadmin=conn.getAdmin();TableNametableName=TableName.valueOf(USAGECOUNT);//创建表描述器HTableDescriptorusagecountHTableDescriptor=newHTableDescriptor(tableName);//创建列簇描述器HColumnDescriptordegeeHColumnDescriptor=newHColumnDescriptor("degee");usagecountHTableDescriptor.addFamily(degeeHColumnDescriptor);//创建表......省略创建表结构在main方法内使用HBaseConfiguration的单例方法实例化conf,并配置参数,建立HBase连接,调用创建表的4个方法,如代码6-26所示。代码6-26main方法publicstaticvoidmain(String[]args)throwsIOException{//创建Configuration对象conf=HBaseConfiguration.create();conf.set("hbase.master","master:16010");conf.set("hbase.rootdir","hdfs://master:8020/hbase");conf.set("hbase.zookeeper.quorum","master,slave1,slave2,slave3");conf.set("perty.clientPort","2181");//建立HBase连接conn=ConnectionFactory.createConnection(conf);......省略创建表结构按顺序依次启动Hadoop集群、Zookeeper集群、HBase集群。运行CreatTable.java程序,IDEA的“Run”窗口输出“Processfinishedwithexitcode0”表示运行成功,进入HBaseShell,使用“list”命令查看HBase数据表,如图6-20所示,已成功创建gamefollows、usagecount、usagerecords、userfollows这4张表。图6-20查看HBase数据表6.3.3业务逻辑业务逻辑现模拟生成一份userfollowgame.txt,记录了用户关注手游时的用户ID、手游ID和手游内容,如表6-11所示。表6-11userfollowgame.txt数据内容用户ID手游ID手游内容weixin01g01手游Aweixin01g02手游Bqq01g02手游Bqq01g03手游Cweixin02g04手游D业务逻辑在src/main/java目录下创建名为business的package,在business包内创建UserFollowGame.java,基于如表6-11所示的数据,实现当用户关注手游时,将信息记录到用户关注手游信息表和手游被关注信息表,如代码6-27所示。代码6-27UserFollowGame.javapublicclassUserFollowGame{privatestaticfinalbyte[]USERFOLLOWS="userfollows".getBytes();privatestaticfinalbyte[]GAMEFOLLOWS="gamefollows".getBytes();privatestaticConfigurationconf;privatestaticConnectionconn;publicstaticvoidmain(String[]args)throwsIOException{//创建Configuration对象conf=HBaseConfiguration.create();conf.set("hbase.master","master:16010");conf.set("hbase.rootdir","hdfs://master:8020/hbase");conf.set("hbase.zookeeper.quorum","master,slave1,slave2,slave3");conf.set("perty.clientPort","2181");......省略业务逻辑运行UserFollowGame.java程序,运行成功后,通过HBaseShell通过scan命令遍历数据表userfollows、gamefollows,如图6-21所示,已成功将数据插入相应数据表中。图6-21遍历数据表userfollows、gamefollows业务逻辑现模拟生成一份gamerecords.txt,记录了用户使用手游时的用户ID和手游ID,如表6-12所示。表6-12gamerecords.txt数据内容用户ID手游IDweixin01g01qq01g02weixin02g04weixin01g01qq01g02qq01g03业务逻辑在business包内创建UserGameRecords.java,基于如表6-12所示的数据,实现当用户使用手游时,将使用记录记录到用户手游使用记录表,如代码6-28所示。代码6-28UserGameRecords.javapublicclassUserGameRecords{privatestaticfinalbyte[]USAGERECORDS="usagerecords".getBytes();privatestaticConfigurationconf;privatestaticConnectionconn;publicstaticvoidmain(String[]args)throwsIOException{//创建Configuration对象conf=HBaseConfiguration.create();conf.set("hbase.master","master:16010");conf.set("hbase.rootdir","hdfs://master:8020/hbase");conf.set("hbase.zookeeper.quorum","master,slave1,slave2,slave3");conf.set("perty.clientPort","2181");......省略业务逻辑运行UserGameRecords.java程序,运行成功后,通过HBaseShell通过scan命令遍历数据表usagerecords,如图6-21所示,已成功将数据插入数据表中。图6-22遍历数据表userfollows、gamefollows业务逻辑在business包内创建ScanData.java,模拟实现查看手游g02被关注的情况、用户weixin01关注手游情况、手游用户qq01使用记录情况,如代码6-29所示,运行结果如图6-23所示。代码6-29ScanData.javapublicclassScanData{privatestaticConfigurationconf;privatestaticConnectionconn;privatestaticfinalbyte[]USERFOLLOWS="userfollows".getBytes();privatestaticfinalbyte[]GAMEFOLLOWS="gamefollows".getBytes();privatestaticfinalbyte[]USAGERECORDS="usagerecords".getBytes();publicstaticvoidmain(String[]args)throwsIOException{//创建Configuration对象conf=HBaseConfiguration.create();conf.set("hbase.master","master:16010");conf.set("hbase.rootdir","hdfs://master:8020/hbase");conf.set("hbase.zookeeper.quorum","master,slave1,slave2,slave3");conf.set("perty.clientPort","2181");......省略图6-23查看数据业务逻辑在src/main/java目录下创建名为mr_putdata的package,在mr_putdata包内通过编写MapReduce程序,实现每个用户每日使用手游的次数统计,并将结果存储至用户手游日使用次数统计表。在mr_putdata包内创建UseCountMapper.java,读取用户手游使用记录表usagerecords,将表内数据转成键值对,其中将rowkey中的时间戳转化为年月日,以“user+年月日+gameID”为键,“1”为值,如代码6-30所示。代码6-30UseCountMapper.javapublicclassUseCountMapperextendsTableMapper<Text,IntWritable>{Textuser_ymd=newText();IntWritableone=newIntWritable(1);/***读取每一行记录,将键中的时间戳转化为年月日*以user_ymd为键,1为值*/@Overrideprotectedvoidmap(ImmutableBytesWritablekey,Resultvalue,Mapper<ImmutableBytesWritable,Result,Text,IntWritable>.Contextcontext)......省略业务逻辑在mr_putdata包内创建UseCountReducer.java,读取Mapper传输过来的键值对,统计键相同的值的和,以“user+年月日”为键,求和结果为值,如代码6-31所示。代码6-31UseCountReducer.javapublicclassUseCountReducerextendsTableReducer<Text,IntWritable,ImmutableBytesWritable>{ImmutableBytesWritableuser_ymd=newImmutableBytesWritable();Loggerlog=LoggerFactory.getLogger(UseCountReducer.class);@Overrideprotectedvoidreduce(Textrk,Iterable<IntWritable>ones,Reducer<Text,IntWritable,ImmutableBytesWritable,Mutation>.Contextcontext)throwsIOException,InterruptedException{String[]user_ymd_game=rk.toString().split("_");intsum=0;)......省略业务逻辑在mr_putdata包内创建UseCountDriver.java,用于关联UseCountMapper和UseCountReducer以及在IDEA上提交整个程序,如代码6-32所示。代码6-32UseCountDriver.javapublicclassUseCountDriverextendsConfiguredimplementsTool{@Overridepublicintrun(String[]args)throwsException{//创建ConfigurationConfigurationconf=getConf();//配置HBase连接参数conf.set("hbase.master","master:16010");conf.set("hbase.rootdir","hdfs://master:8020/hbase");conf.set("hbase.zookeeper.quorum","master,slave1,slave2,slave3");conf.set("perty.clientPort","2181");......省略业务逻辑由于在UseCountDriver程序里直接调用了ToolRunner类的run方法,以及配置好了HBase连接参数,所以无需打包上传至虚拟机,可以直接在IDEA运行MapReduce程序。运行程序UseCountDriver.java,运行成功后,使用HBaseShell查看用户手游日使用次数统计表数据,如图6-24所示,每个用户每日使用手游的次数已统计并记录在usagecount表中。图6-24查看统计结果Sqoop安装与配置主讲:李强任务描述因为Sqoop是一个用于在关系数据库服务器和Hadoop系统之间传输数据的工具,其中Hadoop系统主要是HDFS、Hive和HBase等,所以Sqoop安装后的配置主要就是针对这几个的环境变量的配置工作以及更新所需的Hive和HBase的程序包。任务分析由于Sqoop2偏向服务化,特别是架构稍复杂,配置部署很繁琐,Sqoop1在功能上完全可以满足基本的需求,所以本项目使用Sqoop1中的Sqoop1.4.7版本。本任务只在master节点上进行安装配置和应用即可。7.1.1安装Sqoop组件1.解压安装文件本手册所使用的版本是Sqoop1.4.7,可以从Sqoop官网下载。下载好的安装包都需上传到指定目录下,本手册指定为/root/目录,使用ls命令可以查看上传的安装包(具体上传方式请参考项目1),如图7-1所示。使用tar命令解压Sqoop到/usr/local/src文件夹,并切换到安装目录下查看,可以使用ls查看解压后的效果,如代码7-1所示,效果如图7-2所示。代码7-1解压安装包图7-1查看安装包tar-zxfsqoop-1.4.7.bin__hadoop-2.6.0.tar.gz-C/usr/local/src/cd/usr/local/src/ls图7-2查看解压好的安装包2.修改文件夹名称由于解压后的文件夹名称带有比较复杂的版本号,为了简化后续配置,此处修改文件夹名称。使用mv命令将解压的sqoop-1.4.7.bin__hadoop-2.6.0目录重命名为sqoop,如代码7-2所示,效果如图7-3所示。代码7-2重命名文件夹图7-2查看解压好的安装包tar-zxfsqoop-1.4.7.bin__hadoop-2.6.0.tar.gz-C/usr/local/src/cd/usr/local/src/ls3.修改环境变量文件为了可以在任何目录下直接执行Sqoop的相关命令,可以在环境变量文件中添加Sqoop的环境变量。参考项目2,使用“vi/root/.bash_profile”将如表7-1所示的配置信息添加到/root/.bash_profile文件的末尾,保存退出。表7-1环境变量文件的添加内容#setsqoopenvironmentexportSQOOP_HOME=/usr/local/src/sqoopexportPATH=$PATH:$SQOOP_HOME/binexportCLASSPATH=$CLASSPATH:$SQOOP_HOME/lib4.生效环境变量文件为了刷新环境变量文件的配置,需要在master节点执行下面的命令使得环境变量文件生效,如代码7-3所示。代码7-3生效环境配置文件source/root/.bash_profile7.1.2修改Sqoop配置文件1.修改sqoop-env.sh文件sqoop-env.sh是Sqoop命令执行时去加载HadoopHDFS环境变量,Hive和HBase环境变量的核心配置文件。由于/usr/local/src/sqoop/conf目录里的是配置模板文件,需要复制为sqoop-env.sh,使用代码7-4的代码复制并修改文件内容。代码7-4修改sqoop-env.sh图7-4Sqoop配置文件修改项cd/usr/local/src/sqoop/confcpsqoop-env-template.shsqoop-env.shvisqoop-env.sh打开这个配置文件后,需要修改的环境变量配置项如图7-4所示。1.修改sqoop-env.sh文件该文件中需要修改的图上的四处设置:首先将每个配置项前面的#去掉;HADOOP_COMMON_HOME和HADOOP_MAPRED_HOME均为Hadoop的安装目录;HBASE_HOME为HBase安装目录;HIVE_HOME为Hive安装目录,具体设置参考内容如表7-2所示。表7-2文件的添加内容exportHADOOP_COMMON_HOME=/usr/local/src/hadoopexportHADOOP_MAPRED_HOME=/usr/local/src/hadoopexportHBASE_HOME=/usr/local/src/hbaseexportHIVE_HOME=/usr/local/src/hiveexportHCAT_HOME=/usr/local/src/hive/hcatalog#此项为新增的配置项2.复制MySQL和Hive的驱动程序包为了使Sqoop能够连接MySQL数据库,需要将mysql-connector-java-8.0.21.jar文件放入Sqoop的lib目录中,该Jar文件的版本需要与MySQL数据库的版本相对应,否则Sqoop导入数据时会报错。(MySQL8.0.21对应的是mysql-connector-java-8.0.21.jar版本)。为了使Sqoop能够连接Hive,需要将Hive组件/usr/local/src/hive/lib目录下的hive-common-3.1.2.jar也放入Sqoop安装路径的lib目录中。使用代码7-5进行复制到/usr/local/src/sqoop/lib/,另外复制之前需要先查看读者本地的驱动包版本,不要照抄本手册。代码7-5复制程序包cp/root/mysql-connector-java-8.0.21.jar/usr/local/src/sqoop/lib/cp/usr/local/src/hive/lib/hive-common-3.1.2.jar/usr/local/src/sqoop/lib/cp/usr/local/src/hive/lib/hive-exec-3.1.2.jar/usr/local/src/sqoop/lib/7.1.3测试安装1.启动Hadoop集群执行Sqoop前需要先启动Hadoop集群,参考项目2在master节点执行start-all.sh启动,并使用jps查看Java进程是否正常,此处不再详述。2.测试连接使用代码7-6中的Sqoop命令连接MySQL,该命令的几个参数说明如下。(1)list-databases:表示显示连接上的MySQL服务器的数据库名称。(2)--connect:MySQL数据库连接URL,此处为:“jdbc:mysql://master:3306/sqoop_db”。(3)--username:MySQL数据库的用户名,此处为“root”。(4)-P:root用户的密码,在交互中输入“Password123$”。(MySQL数据库root用户的密码,请读者根据实际情况修改。)代码7-6连接MySQLsqooplist-databases--connectjdbc:mysql://master:3306/--usernameroot-P2.测试连接效果如图7-5所示。至此,以上完成了Sqoop的安装与配置。图7-5测试MySQL连接图谢谢Sqoop导入导出应用操作主讲:李强任务描述本任务主要完成基于Linux环境,在Hadoop集群掌握Sqoop导入和导出命令使用的工作。通过完成本实验任务,要求学生熟练掌握Sqoop导入和导出命令中各项参数使用的方法,以及如何查看导入导出效果。任务分析本环节分为如下两个过程。(1)导入数据:从MySQL关系型数据库中导入数据到HDFS分布式文件系统中、Hive分布式数据仓库中;(2)导出数据:从Hive分布式数据仓库中导出数据到MySQL关系数据库中。Sqoop命令执行的原理是将执行命令转化成MapReduce作业来实现数据的迁移。所以需要确保Hadoop集群正常运行,MySQL数据库正常启动以及Hive正常配置启动。7.2.1准备MySQL数据库数据准备MySQL数据库数据在MySQL数据库中创建一个名称为sqoop_db的数据库,在该数据库中创建一个名称为student的表,该表包含三个列(sid(学号),sname(姓名),sage(年龄)),并在表中添加一些测试数据,读者可以自行添加。使用代码7-7启动MySQL。代码7-7启动MySQL数据库数据准备图7-6MySQL数据库数据准备mysql-uroot-pPassword123$执行代码7-8中的MySQL的SQL语句,完成后的效果如图7-6所示。代码7-8MySQL数据库准备工作代码createdatabasesqoop_db;#创建数据库名usesqoop_db;#切换使用创建的数据库createtablestudent(sidint,snamevarchar(20),sageint);#创建student表格insertintostudentvalues(1,'张三',19),(2,'李四',20),(3,'王五',18);#往表中添加一些测试数据select*fromstudent;#查询显示表中的数据exit;#全部完成后退出MySQL客户端7.2.2Hive中准备数据库表Hive中准备数据库表要使用Sqoop工具将MySQL中刚才的测试数据导入到Hive,Hive中应该创建一个同名的数据库,以及该数据库中同名同结构的空表。使用Hive命令启动HiveCLI的用户接口后,执行代码7-9中的Hive的HQL语句创建库和表。代码7-9Hive创建数据库和表createdatabasesqoop_db;#创建数据库名usesqoop_db;#切换使用创建的数据库createtablestudent(sidint,snamevarchar(20),sageint);#创建student表格exit;#全部完成后退出Hive客户端由于Hive中执行的操作需要提交MapReduce执行工作,执行过程比较复杂,请读者参考项目4中的Hive的库和表操作效果,此处不再截图显示。7.2.3从MySQL中导入数据至Hive1.import到Hive为了可以在任何目录下直接执行Sqoop的相关命令,可以在环境变量文件中添加Sqoop的环境变量。参考项目2,使用“vi/root/.bash_profile”将如表7-1所示的配使用代码7-10中的sqoopimport命令来导入MySQL中sqoop_db库中student表的数据到Hive中sqoop_db库中student表,该命令的几个参数说明如下。(1)--connect:MySQL数据库连接URL,此处为“jdbc:mysql://master:3306/sqoop_db”。(2)--username和--password:MySQL数据库的用户名和密码,此处为“root”和“Password123$”。(3)--table:导出的数据表名,此处为“student”。(4)--fields-terminated-by:Hive中字段分隔符,此处为“|”。(5)--delete-target-dir:删除导出目的目录。(6)--num-mappers:Hadoop执行Sqoop导入导出启动的Map任务数,此处为1。(7)--hive-import--hive-database:导出到Hive的数据库名,此处为“sqoop_db”。(8)--hive-table:导出到Hive的表名,此处为“student”。请特别注意代码7-10中的斜杠表示命令换行,如果连续写完完整的命令则不需要斜杠,后面其他的Sqoop导入导出操作类似。置信息添加到/root/.bash_profile文件的末尾,保存退出。1.import到Hive代码7-10Sqoop导入命令图7-7MySQL数据库导入Hive结果sqoopimport--connectjdbc:mysql://master:3306/sqoop_db\--usernameroot--passwordPassword123$\--tablestudent\--fields-terminated-by'|'\--delete-target-dir\--num-mappers1\--hive-import--hive-databasesqoop_db--hive-tablestudent导入成功的效果如图7-7所示。2.查看Hive数据继续使用Hive命令启动HiveCLI的用户接口后,执行中的Hive的HQL语句查询student表中的数据,如代码7-11所示,发现从MySQL中成功导入的数据,效果如图7-8所示。代码7-11Hive查询数据hive#启动Hivehive>usesqoop_db;hive>select*fromstudent;图7-8Hive导入数据查询效果7.2.4从MySQL中导入数据至HDFS1.import到HDFS使用代码7-12中的sqoopimport命令来导入MySQL中sqoop_db库中student表的数据到HDFS中,该命令的几个参数说明如下。(1)--connect:MySQL数据库连接URL,此处为“jdbc:mysql://master:3306/sqoop_db”。(2)--username和--password:MySQL数据库的用户名和密码,此处为“root”和“Password123$”。(3)--table:导出的数据表名,此处为“student”。(4)--columns:导出的数据表中的列,此处为“sid,sname,sage”。(5)-m:Hadoop执行Sqoop导入启动的Map任务数,此处为1。(6)--target-dir:为数据导入到HDFS的路径,此处为“/sqoop/student”,
会自动给创建该HDFS目录和文件。导入执行成功的过程最后一段截图效果如图7-9所示。代码7-12Sqoop导入命令sqoopimport\--connectjdbc:mysql://master:3306/sqoop_db\-usernameroot-passwordPassword123$\--tablestudent--columnssid,sname,sage\-m1--target-dir'/sqoop/student'图7-4Sqoop配置文件修改项2.查看HDFS数据通过HDFS的查看数据的命令可以查询导入的HDFS文件的内容,效果如图7-10所示。也可以访问HDFS的Web页面进行数据的查看。在浏览器中输入http://master:9870(Hadoop3.1.4版本),按如下顺序操作查询数据。(1)登录网址,查看HDFSWebUI主页,单击菜单【Utilities】下的【Browsethesystem】,如图7-11所示。表7-2文件的添加内容图7-11HDFSWebUI主页图2.查看HDFS数据(2)选择进入HDFS文件系统后,能看到列表中有/sqoop的文件夹,单击文件夹【sqoop】,如图7-12所示。图7-12sqoop文件夹2.查看HDFS数据(3)单击sqoop文件夹后,里面有个student文件夹,如所示,继续单击【student】,如图
7-13所示。图7-13student文件夹2.查看HDFS数据(4)单击studen文件夹后,里面有两个文件文件,其中part-m-00000为数据存储的文件,继续单击【part-m-00000】,如图7-14所示。图7-14part-m-00000文件2.查看HDFS数据(5)单击数据文件后会弹出该文件的详细信息窗口,在该窗口上,单击【Headthefile】可以看到文件中的数据显示在下方,如图7-15所示。图7-15part-m-00000文件内容7.2.5从Hive中导出数据至MySQL1.export到Mysql使用代码7-13中的sqoopexport命令来导出Hive中sqoop_db库中student表的数据到MySQL中sqoop_db库中student表,该命令的几个参数说明如下。(1)--connect:MySQL数据库连接URL,此处为“jdbc:mysql://master:3306/sqoop_db”。(2)--username和--password:MySQL数据库的用户名和密码,此处为“root”和“Password123$”。(3)--table:导出的数据表名,此处为“student”。(4)--input-fields-terminated-by:Hive中字段分隔符,此处为“|”。(5)--export-dir:Hive数据表在HDFS中的存储路径,此处为“/user/hive/warehouse/sqoop_db.db/student/*”,因为Hive的数据实际存储在HDFS,路径为/user/hive/warehouse/数据库名称.db/表名/*。代码7-13Sqoop导出命令sqoopexport\--connect\"jdbc:mysql://master:3306/sqoop_db?useUnicode=true&characterEncoding=utf-8"\--usernameroot--passwordPassword123$\--tablestudent\--input-fields-terminated-by'|'\--export-dir/user/hive/warehouse/sqoop_db.db/student/*1.export到Mysql导出执行成功的过程最后一段截图如图7-16所示。图7-16Hive导出到MySQL执行过程2.查看MySQL数据此时可以登录MySQL数据库,查询student表中的数据效果如图7-17所示。图7-17Hive导入MySQL的数据效果谢谢用户日志数据查询与传输主讲:李强任务描述某网站的数据库中储存了约10万条用户浏览数据,现已被导出为CSV格式的文件(data_browse.csv),文件记录的是用户在该网站上的浏览设备信息,包括用户ID、浏览器、操作系统、设备类别、访问次数,具体的字段说明如表7-3所示。现通过对用户日志数据进行处理,根据操作系统类型进行用户信息分类,实现用户群分,以便研究不同用户群的兴趣特征。并筛选出操作系统类型为“iOS”的用户信息保存至Hive中的表new_browse中。表7-3字段说明属性名称属性说明visitId用户IDr浏览器operatingSystem操作系统deviceCategory设备类别visitNumber访问次数任务分析使用Sqoop实现在Hadoop和关系型数据库MySQL之间进行高效的数据传输,实现过程如下。(1)将CSV格式的用户浏览数据导入MySQL。(2)将MySQL数据库中的数据增量导入Hive。(3)将Hive中的浏览信息筛选结果导出至MySQL中。7.3.1查询MySQL用户日志数据表记录数查询MySQL用户日志数据表记录数根据表7-3所示的数据字段说明,在MySQL数据库中创建存储用户浏览数据的表browse_log,并将data_browse.csv文件数据导入browse_log表中,如代码7-14所示。实现使用eval命令查询MySQL用户浏览数据表的记录数,如代码7-15所示。程序运行结果如图7-18所示,用户浏览数据表记录数为99024。代码7-14创建数据表createdatabasebrowse;USEbrowse;//创建数据表createtablebrowse_log(visitidlong,browservarchar(50),operatingSystemvarchar(50),deviceCategoryvarchar(50),visitNumberint);//导入data_browse.csv文件数据loaddatainfile"/var/lib/mysql-files/data_browse.csv"intotablebrowse_logfieldsterminatedby',';bin/sqoopeval\--connectjdbc:mysql://master:3306/browse\--usernameroot\--password123456\--query"selectcount(browser)frombrowse_log"图7-18查询结果7.3.2增量导入MySQL中的用户日志数据至Hive增量导入MySQL中的用户日志数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年消防安全管理与维护协议3篇
- 2024-2030年中国婴儿纸尿裤行业市场竞争趋势及发展潜力分析报告
- 2024-2030年中国女鞋市场需求状况及发展策略研究报告
- 2024-2030年中国商业街区建设行业管理模式规划分析报告
- 2024年度施工现场治安消防应急预案编制与演练合同2篇
- 2024年物流协同:货物运输承包协议
- 2024年度建筑工程施工预备协议版
- 2024上诉离婚协议书样本:上诉离婚协议与子女抚养责任落实3篇
- 2024商场保安员培训与考核管理服务合同2篇
- 2024全新智能安防监控系统合同签订与执行细则2篇
- 2025年重庆货运从业资格证考试题及答案详解
- 生命不是游戏拒绝死亡挑战主题班会
- 本地化部署合同
- 2024年云南省中考历史试卷
- 油气管线安全保护方案
- 国家职业技术技能标准 4-07-05-04 消防设施操作员 人社厅发201963号
- 新教科版小学1-6年级科学需做实验目录
- 2024-2030年中国辣椒碱市场占有率调查及经营战略可行性分析研究报告
- 拒绝躺平 停止摆烂-学生心理健康主题班会(课件)
- 现代教育技术智慧树知到期末考试答案章节答案2024年济宁学院
- 现代通信技术导论智慧树知到期末考试答案章节答案2024年北京科技大学
评论
0/150
提交评论