读写HBase数据①在hbaseshell中使用命令创建HBase数据库;②使用spark读写HBase数据库中的数据。实验原理->HBaseHBase是一个高可靠、高性能、面向列、可伸缩分布式数据库,主要用来存储非结构化和半结构化的松散数据。HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表。
->hbase-shellhbase-shell是一种HBase交互式操作环境,可以在其中输入命令,完成数据库创建和表的增、删、查、改等操作。
1.HBase的安装∥下载文件
HBase是Hadoop生态系统中的一个组件,Hadoop安装以后,本身并不包含HBase,因此,需要单独安装HBase。打开火狐浏览器,访问如下链接下载hbase-1.1.5-bin.tar.gz,下载的文件被放到了Linux系统的“/home/user/Downloads/”目录下。
拷贝代码http://file.ictedu.com/fileserver/big_data_common/data/hbase-1.1.5-bin.tar.gz
∥安装文件下载完安装文件以后,需要对文件进行解压。按照Linux系统使用的默认规范,用户安装的软件一般都是存放在“/usr/local/”目录下,打开一个终端,请使用hadoop用户登录终端,执行如下命令:
拷贝代码sudotar-zxf/home/user/Downloads/hbase-1.1.5-bin.tar.gz-C/usr/local将解压的文件名hbase-1.1.5改为hbase,以方便使用,命令如下:
拷贝代码sudomv/usr/local/hbase-1.1.5/usr/local/hbase将HBase安装目录下的bin目录(即/usr/local/hbase/bin)添加到系统的PATH环境变量中,这样,每次启动HBase时就不需要到“/usr/local/hbase”目录下执行启动命令,方便HBase的使用。请使用vim编辑器打开“~/.bashrc”文件,命令如下:
拷贝代码vim~/.bashrc然后再把HBase的bin目录“/usr/local/hbase/bin”追加到PATH中。当要在PATH中继续加入新的路径时,只要用英文冒号“:”隔开,把新的路径加到后面即可,追加后的结果如下:
拷贝代码exportPATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin:/usr/local/hbase/bin添加后,执行如下命令使设置生效:
拷贝代码source~/.bashrc需要为当前登录Linux系统的hadoop用户添加访问HBase目录的权限,将HBase安装目录下的所有文件的所有者改为hadoop,命令如下:
拷贝代码cd/usr/localsudochown-Rhadoophttps://www.mfisp.com/hbase
∥配置使用vim编辑器打开“/usr/local/hbase/conf/hbase-env.sh”,命令如下:
拷贝代码vim/usr/local/hbase/conf/hbase-env.sh打开hbase-env.sh文件以后,需要在hbase-env.sh文件中配置JAVA_HOME、HBASE_CLASSPATH和HBASE_MANAGES_ZK。其中,HBASE_CLASSPATH设置为本机Hadoop安装目录下的conf目录(即/usr/local/hadoop/conf)。JAVA_HOME和HBASE_MANAGES_ZK的配置方法和上面单机模式的配置方法相同。修改后的hbase-env.sh文件应该包含如下三行信息:
拷贝代码exportJAVA_HOME=/usr/share/jdk1.8.0_181exportHBASE_CLASSPATH=/usr/local/hadoop/confexportHBASE_MANAGES_ZK=true修改完成以后,保存hbase-env.sh文件并退出vim编辑器。
使用vim编辑器打开并编辑“/usr/local/hbase/conf/hbase-site.xml”文件,命令如下:
拷贝代码vim/usr/local/hbase/conf/hbase-site.xml在hbase-site.xml文件中,需要设置属性hbase.rootdir,用于指定HBase数据的存储位置。在HBase伪分布式模式中,是使用伪分布式模式的HDFS存储数据,因此,需要把hbase.rootdir设置为HBase在HDFS上的存储路径,根据Hadoop伪分布式模式的配置可以知道,HDFS的访问路径为“hdfs://localhost:9000/”,这里设置hbase.rootdir为“hdfs://localhost:9000/hbase”。此外,由于采用了伪分布式模式,因此,还需要将属性hbase.cluter.distributed设置为true。修改后的hbase-site.xml文件中的配置信息如下:
hbase.rootdirhdfs://localhost:9000/hbase
hbase.cluster.distributedtrue
保存hbase-site.xml文件,并退出vim编辑器。
2.创建一个HBase表∥启动Hadoop因为HBase是伪分布式模式,需要调用HDFS,所以,需要首先切换到hadoop用户下,hadoop密码为hadoop@12#$,然后再在终端中输入下面命令启动Hadoop的HDFS:
拷贝代码su-hadoopcd/usr/local/hadoophttps://www.mfisp.com/sbin/start-dfs.sh
∥启动HBase然后,执行如下命令启动HBase://启动HBase
拷贝代码cd/usr/local/hbasehttps://www.mfisp.com/bin/start-hbase.sh//启动HBaseShell
拷贝代码https://www.mfisp.com/bin/hbaseshell
∥创建HBase表如果里面已经有一个名称为student的表,请使用如下命令删除该表:
拷贝代码disable‘student’拷贝代码drop‘student’在HBaseShell中执行如下命令创建student表:
拷贝代码create‘student’,‘info’首先录入student表的第一个学生记录
拷贝代码put‘student’,‘1’,‘info:name’,‘Xueqian’拷贝代码put‘student’,‘1’,‘info:gender’,‘F’拷贝代码put‘student’,‘1’,‘info:age’,‘23’然后录入student表的第二个学生记录
拷贝代码put‘student’,‘2’,‘info:name’,‘Weiliang’拷贝代码put‘student’,‘2’,‘info:gender’,‘M’拷贝代码put‘student’,‘2’,‘info:age’,‘24’
3.配置Spark∥把HBase安装目录下的一些jar文件拷贝到Spark安装目录中把HBase安装目录下的lib目录中的一些jar文件拷贝到Spark安装目录中,这些都是编程时需要引入的jar包。需要拷贝的jar文件包括:所有hbase开头的jar文件、guava-12.0.1.jar、htrace-core-3.1.0-incubating.jar和protobuf-java-2.5.0.jar,命令如下:
拷贝代码cd/usr/local/spark/jarsmkdirhbase拷贝代码cdhbasecp/usr/local/hbase/lib/hbase*.jarhttps://www.mfisp.com/拷贝代码cp/usr/local/hbase/lib/guava-12.0.1.jarhttps://www.mfisp.com/拷贝代码cp/usr/local/hbase/lib/htrace-core-3.1.0-incubating.jarhttps://www.mfisp.com/拷贝代码cp/usr/local/hbase/lib/protobuf-java-2.5.0.jarhttps://www.mfisp.com/
读写HBase数据①在hbase-shell中使用命令创建HBase数据库;②使用Spark读写HBase数据库中的数据。实验原理->HBaseHBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,主要用来存储非结构化和半结构化的松散数据。HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表。
->hbase-shellhbase-shell是一种HBase交互式操作环境,可以在其中输入命令,完成数据库创建和表的增、删、查、改等操作。
1.HBase的安装∥下载文件HBase是Hadoop生态系统中的一个组件,Hadoop安装以后,本身并不包含HBase,因此,需要单独安装HBase。打开火狐浏览器,访问如下链接下载hbase-1.1.5-bin.tar.gz,下载的文件被放到了Linux系统的“/home/user/Downloads/”目录下。
拷贝代码http://file.ictedu.com/fileserver/big_data_common/data/hbase-1.1.5-bin.tar.gz∥安装文件下载完安装文件以后,需要对文件进行解压。按照Linux系统使用的默认规范,用户安装的软件一般都是存放在“/usr/local/”目录下,打开一个终端,请使用hadoop用户登录终端,执行如下命令:

拷贝代码sudomv/usr/local/hbase-1.1.5/usr/local/hbase将HBase安装目录下的bin目录(即/usr/local/hbase/bin)添加到系统的PATH环境变量中,这样,每次启动HBase时就不需要到“/usr/local/hbase”目录下执行启动命令,方便HBase的使用。请使用vim编辑器打开“~/.bashrc”文件,命令如下:
拷贝代码vim~/.bashrc然后再把HBase的bin目录“/usr/local/hbase/bin”追加到PATH中。当要在PATH中继续加入新的路径时,只要用英文冒号“:”隔开,把新的路径加到后面即可,追加后的结果如下:
拷贝代码exportPATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin:/usr/local/hbase/bin添加后,执行如下命令使设置生效:
拷贝代码source~/.bashrc需要为当前登录Linux系统的hadoop用户添加访问HBase目录的权限,将HBase安装目录下的所有文件的所有者改为hadoop,命令如下:
拷贝代码cd/usr/localsudochown-Rhadoophttps://www.mfisp.com/hbase∥配置使用vim编辑器打开“/usr/local/hbase/conf/hbase-env.sh”,命令如下:
拷贝代码vim/usr/local/hbase/conf/hbase-env.sh打开hbase-env.sh文件以后,需要在hbase-env.sh文件中配置JAVA_HOME、HBASE_CLASSPATH和HBASE_MANAGES_ZK。其中,HBASE_CLASSPATH设置为本机Hadoop安装目录下的conf目录(即/usr/local/hadoop/conf)。JAVA_HOME和HBASE_MANAGES_ZK的配置方法和上面单机模式的配置方法相同。修改后的hbase-env.sh文件应该包含如下三行信息:
拷贝代码exportJAVA_HOME=/usr/share/jdk1.8.0_181exportHBASE_CLASSPATH=/usr/local/hadoop/confexportHBASE_MANAGES_ZK=true修改完成以后,保存hbase-env.sh文件并退出vim编辑器。
使用vim编辑器打开并编辑“/usr/local/hbase/conf/hbase-site.xml”文件,命令如下:
拷贝代码vim/usr/local/hbase/conf/hbase-site.xml在hbase-site.xml文件中,需要设置属性hbase.rootdir,用于指定HBase数据的存储位置。在HBase伪分布式模式中,是使用伪分布式模式的HDFS存储数据,因此,需要把hbase.rootdir设置为HBase在HDFS上的存储路径,根据Hadoop伪分布式模式的配置可以知道,HDFS的访问路径为“hdfs://localhost:9000/”,这里设置hbase.rootdir为“hdfs://localhost:9000/hbase”。此外,由于采用了伪分布式模式,因此,还需要将属性hbase.cluter.distributed设置为true。修改后的hbase-site.xml文件中的配置信息如下:
hbase.rootdirhdfs://localhost:9000/hbase
hbase.cluster.distributedtrue
保存hbase-site.xml文件,并退出vim编辑器。
2.创建一个HBase表∥启动Hadoop因为HBase是伪分布式模式,需要调用HDFS,所以,需要首先切换到hadoop用户下,hadoop密码为hadoop@12#$,然后再在终端中输入下面命令启动Hadoop的HDFS:
拷贝代码su-hadoopcd/usr/local/hadoophttps://www.mfisp.com/sbin/start-dfs.sh∥启动HBase然后,执行如下命令启动HBase://启动HBase
拷贝代码cd/usr/local/hbasehttps://www.mfisp.com/bin/start-hbase.sh//启动HBaseShell
拷贝代码https://www.mfisp.com/bin/hbaseshell∥创建HBase表如果里面已经有一个名称为student的表,请使用如下命令删除该表:
拷贝代码disable‘student’拷贝代码drop‘student’在HBaseShell中执行如下命令创建student表:
拷贝代码create‘student’,‘info’首先录入student表的第一个学生记录
拷贝代码put‘student’,‘1’,‘info:name’,‘Xueqian’拷贝代码put‘student’,‘1’,‘info:gender’,‘F’拷贝代码put‘student’,‘1’,‘info:age’,‘23’然后录入student表的第二个学生记录
拷贝代码put‘student’,‘2’,‘info:name’,‘Weiliang’拷贝代码put‘student’,‘2’,‘info:gender’,‘M’拷贝代码put‘student’,‘2’,‘info:age’,‘24’3.配置Spark∥把HBase安装目录下的一些jar文件拷贝到Spark安装目录中把HBase安装目录下的lib目录中的一些jar文件拷贝到Spark安装目录中,这些都是编程时需要引入的jar包。需要拷贝的jar文件包括:所有hbase开头的jar文件、guava-12.0.1.jar、htrace-core-3.1.0-incubating.jar和protobuf-java-2.5.0.jar,命令如下:
拷贝代码cd/usr/local/spark/jarsmkdirhbase拷贝代码cdhbasecp/usr/local/hbase/lib/hbase*.jarhttps://www.mfisp.com/拷贝代码cp/usr/local/hbase/lib/guava-12.0.1.jarhttps://www.mfisp.com/拷贝代码cp/usr/local/hbase/lib/htrace-core-3.1.0-incubating.jarhttps://www.mfisp.com/拷贝代码cp/usr/local/hbase/lib/protobuf-java-2.5.0.jarhttps://www.mfisp.com/4.编写程序读取HBase数据∥新建一个代码文件SparkOperateHBase.scala如果要让Spark读取HBase,就需要使用SparkContext提供的newAPIHadoopRDD这个API将表的内容以RDD的形式加载到Spark中。新建一个代码目录:#如果此前已经存在该目录则不用创建
拷贝代码cd/usr/local/sparkmkdirmycode拷贝代码cdmycodemkdirhbasecdhbasemkdir-psrc/main/scalacdsrc/main/scalavimSparkOperateHBase.scala在“/usr/local/spark/mycode/hbase/src/main/scala”目录下新建一个SparkOperateHBase.scala代码文件,输入以下代码:
拷贝代码importorg.apache.hadoop.conf.Configurationimportorg.apache.hadoop.hbase._importorg.apache.hadoop.hbase.client._importorg.apache.hadoop.hbase.mapreduce.TableInputFormatimportorg.apache.hadoop.hbase.util.Bytesimportorg.apache.spark.SparkContextimportorg.apache.spark.SparkContext._importorg.apache.spark.SparkConfobjectSparkOperateHBase{defmain(args:Array[String]){valconf=HBaseConfiguration.create()valsc=newSparkContext(newSparkConf())//设置查询的表名conf.set(TableInputFormat.INPUT_TABLE,“student”)valstuRDD=sc.newAPIHadoopRDD(conf,classOf[TableInputFormat],classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],classOf[org.apache.hadoop.hbase.client.Result])valcount=stuRDD.count()println(“StudentsRDDCount:”+count)stuRDD.cache()//遍历输出stuRDD.foreach({case(_,result)=>valkey=Bytes.toString(result.getRow)valname=Bytes.toString(result.getValue(“info”.getBytes,“name”.getBytes))valgender=Bytes.toString(result.getValue(“info”.getBytes,“gender”.getBytes))valage=Bytes.toString(result.getValue(“info”.getBytes,“age”.getBytes))println(“Rowkey:”+key+"Name:“+name+”Gender:“+gender+”Age:"+age)})}}∥创建一个simple.sbt文件可以利用sbt工具对SparkOperateHBase.scala代码文件进行编译打包,在执行打包命令之前,需要在“/usr/local/spark/mycode/hbase”目录下创建一个simple.sbt文件,并录入下面的内容:
拷贝代码name:=“SimpleProject”version:=“1.0”scalaVersion:=“2.11.8”libraryDependencies+=“org.apache.spark”%%“spark-core”%“2.1.0”libraryDependencies+=“org.apache.hbase”%“hbase-client”%“1.1.5”libraryDependencies+=“org.apache.hbase”%“hbase-common”%“1.1.5”libraryDependencies+=“org.apache.hbase”%“hbase-server”%“1.1.5”
∥检查整个应用程序的文件结构为了保证sbt能够正常运行,先执行如下命令检查整个应用程序的文件结构:
拷贝代码cd/usr/local/spark/mycode/hbasefind.文件结构应该是类似如下的内容:.https://www.mfisp.com/srchttps://www.mfisp.com/src/mainhttps://www.mfisp.com/src/main/scalahttps://www.mfisp.com/src/main/scala/SparkOperateHBase.scalahttps://www.mfisp.com/simple.sbt
∥把整个应用程序打包成JAR包接下来,我们可以通过如下代码将整个应用程序打包成JAR包:#一定把这个目录设置为当前目录
拷贝代码cd/usr/local/spark/mycode/hbase/usr/local/sbt/sbtpackage生成的应用程序JAR包的位置为“/usr/local/spark/mycode/hbase/target/scala-2.11/simple-project_2.11-1.0.jar”。
∥使用spark-submit命令提交运行由于文件打包时间较长,jar包已经提前保存在/home/user/Downloads/spark/hbase/1目录下,可以直接选取目录下文件提交
拷贝代码/usr/local/spark/bin/spark-submit--driver-class-path/usr/local/spark/jars/hbase/*:/usr/local/hbase/conf--class“SparkOperateHBase”/home/user/Downloads/spark/HBase/1/simple-project_2.11-1.0.jar
5.编写程序向HBase写入数据∥新建一个代码文件SparkWriteHBase.scala在“/usr/local/spark/mycode/hbase/src/main/scala”目录下新建一个代码文件SparkWriteHBase.scala,并在其中输入如下代码:
拷贝代码importorg.apache.hadoop.hbase.HBaseConfigurationimportorg.apache.hadoop.hbase.mapreduce.TableOutputFormatimportorg.apache.spark._importorg.apache.hadoop.mapreduce.Jobimportorg.apache.hadoop.hbase.io.ImmutableBytesWritableimportorg.apache.hadoop.hbase.client.Resultimportorg.apache.hadoop.hbase.client.Putimportorg.apache.hadoop.hbase.util.BytesobjectSparkWriteHBase{defmain(args:Array[String]):Unit={valsparkConf=newSparkConf().setAppName(“SparkWriteHBase”).setMaster(“local”)valsc=newSparkContext(sparkConf)valtablename=“student”sc.hadoopConfiguration.set(TableOutputFormat.OUTPUT_TABLE,tablename)valjob=newJob(sc.hadoopConfiguration)job.setOutputKeyClass(classOf[ImmutableBytesWritable])job.setOutputValueClass(classOf[Result])job.setOutputFormatClass(classOf[TableOutputFormat[ImmutableBytesWritable]])//下面这行代码用于构建两行记录valindataRDD=sc.makeRDD(Array(“3,Rongcheng,M,26”,“4,Guanhua,M,27”))valrdd=indataRDD.map(_.split(“,”)).map{arr=>{//设置行键(rowkey)的值valput=newPut(Bytes.toBytes(arr(0)))//设置info:name列的值put.add(Bytes.toBytes(“info”),Bytes.toBytes(“name”),Bytes.toBytes(arr(1)))//设置info:gender列的值put.add(Bytes.toBytes(“info”),Bytes.toBytes(“gender”),Bytes.toBytes(arr(2)))//设置info:age列的值put.add(Bytes.toBytes(“info”),Bytes.toBytes(“age”),Bytes.toBytes(arr(3).toInt))//构建一个键值对,作为rdd的一个元素(newImmutableBytesWritable,put)
rdd.saveAsNewAPIHadoopDataset(job.getConfiguration())}}∥把整个应用程序打包成JAR包接下来,我们可以通过如下代码将整个应用程序打包成JAR包:#一定把这个目录设置为当前目录
拷贝代码cd/usr/local/spark/mycode/hbase/usr/local/sbt/sbtpackage生成的应用程序JAR包的位置为“/usr/local/spark/mycode/hbase/target/scala-2.11/simple-project_2.11-1.0.jar”。
∥使用spark-submit命令提交运行由于文件打包时间较长,jar包已经提前保存在/home/user/Downloads/spark/HBase/2目录下,可以直接选取目录下文件提交
拷贝代码/usr/local/spark/bin/spark-submit--driver-class-path/usr/local/spark/jars/hbase/*:/usr/local/hbase/conf--class“SparkWriteHBase”/home/user/Downloads/spark/HBase/2/simple-project_2.11-1.0.jar∥在hbase-shell中查看HBase表记录是否发生变化上面Spark程序执行成功以后,切换到HBaseShell交互式环境中,执行如下命令查看student表:
拷贝代码scan‘student’可以看到,两条记录已经被成功插入到student表中。
本文来源:国外服务器--读写HBase数据(hbase读写数据流程)
本文地址:https://www.idcbaba.com/guowai/2716.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



