干货在HBaseSpark和HDFS中安装示例应用程序

Posted 小象

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货在HBaseSpark和HDFS中安装示例应用程序相关的知识,希望对你有一定的参考价值。

大数据分析挖掘原创作品,欢迎大家疯狂转发


Apache Spark是一个值得大书特书的架构,无论作为计算模型,还是设计优秀的产品,它都是极富创新性的。人们也许会将其与近来流行的其他分布式计算框架——比如Apache Storm相提并论,并伴随这样的定论:“Spark适合批处理,Storm适合Streaming”。不过两者是截然不同的。Storm是一个数据流框架,与HyperGraph数据流框架十分类似,还存在其他类似的框架。它是基于一个至少从20世纪70年代就已存在的模型而改造。


另一方面,Spark是一种处理大量含有复杂、任意算法数据的新方式。注意这个词“任意”——与Map/Reduce不同,Spark支持对数据做任意运算。本想就Storm和Spark之间的根本区别再多说一些,因为理论上来说这确实非常有趣。不过强烈推荐阅读描述RDD(弹性分布式数据集)的原创论文,里面总结了Spark的基础概念。 


本文只是针对想学习主流技术堆栈三剑客——HDFS(Hadoop分布式文件系统)、HBase还有Apache Spark编程的人,做个快速的“操作方式”介绍。以后有时间,笔者可能会对错综复杂的集群安装一探究竟。不过本文旨在列出能够运行系统的最少安装步骤。 


每当我提到相对文件路径,指的是在组件的主要安装目录下的路径,也就是说:如果我在说Hadoop的时候,写'etc/hadoop'的意思是Hadoop安装目录下的etc/hadoop路径,而不是根目录下的etc/hadoop。 


所有代码,包括样例数据文件还有Maven POM都能在这里找到。


1

HBase的安装

我们从HBase开始的原因是,事实上它甚至无需Hadoop就能运行。当然,需要HBase的标准包,最新稳定版是1.1.2。不过我们不这样做,因为还要安装Spark。有集成了Spark的HBase,将Spark作为HBase的官方模块包含在内。不过只有最新版2.0.0才有,这个版本尚不稳定。如果是刚开始使用这些技术,可能并不关心是否生产版本。为了安装HBase,需要先打包。以下是步骤:


1. 从GIT复制整个项目:git clone https://github.com/apache/hbase.git 

2. 确保使用最新的Apache Maven(3.0.5无法使用);如果还没有的话,去下3.3+的。 

3. 打开HBase项目目录,用以下命令打包:mvn -DskipTests=true install。这会将所有hbase模块放入本地maven repo中,在基于本地maven的Spark项目中会需要这些内容。 

4. 然后创建hbase目录:mvn -DskipTests=true package assembly:single 。可以在hbase-assembly/target/hbase-2.0.0-SNAPSHOT-bin.tar.gz下找到tarball包。 

5. 这就是需要解压到选中安装目录之下的内容,安装目录路径类似/opt/hbase。 

6. 好极了。现在需要配置新的hbase安装(untar刚刚创建的安装包)。


编辑文件/opt/hbase/conf/hbase-site.xml,指定HBase存储数据的位置。使用以下模板,替换其中路径:




1. 确保可以用bin/start-hbase.sh(or .cmd)来运行HBase。 

2. 然后用bin/hbase shell启动HBase命令行界面,输入命令查看所有可用表格列表——当然是空的。


2

Spark开发安装

Spark本身是个数据处理框架。可以运行在集群环境中,有一个可以从客户端提交job的服务器。但要想启动,无需真正进行特殊的下载或部署,只需在项目中包含Maven依赖,便可将框架引入。之后可从主程序调用,并在单进程中运行。 


假设已按上述方式构建了HBase,现在开始下一步安装。有一些样例数据,还有一个用到两类不同Spark的样例程序:普通API与SQL类Spark模块——实际上是一个可扩展的分布式SQL查询引擎。 没有必要复制完整的代码,下面我会列出相关的部分代码。Maven pom只需要包含hbase-spark依赖:


【干货】在HBase、Spark和HDFS中安装示例应用程序


这段代码会加载所需的内容到本地HBase实例中,并用Spark进行处理。上面提到的Spark SQL模块只在样例的SQL部分有单独的依赖关系:


【干货】在HBase、Spark和HDFS中安装示例应用程序


样例程序还有两个其他辅助依赖:一个是CSV解析,还有一个是mJson数据库,可以在Github GIST的pom.xml文件中看到。


3

带入数据

现在可以用一些信息公开的数据做些尝试了,取自迈阿密德郡的近期被捕人员名单。可以在这里下载到——以excel格式输出文件,命名为jaildata.csv。尽管文件有些大,我已经做了输出处理,放在了GIST中。数据集很简单:包含2015年大部分的被捕人员。每份记录/行都有被捕日期、地点、罪犯姓名、出生日期与最多三项指控罪名。例如:对照超过30的罪犯,我们能找到不到30的罪犯中,有多少被指控有“殴打(battery)”罪名。 


第一步,从CSV文件中将数据导入HBase(注意Spark能够直接处理CSV文件)。在ImportData.java程序中完成,创建新表格命名为jaildata,然后loop所CSV文件中的所有行,导入非空栏目。我直接在源代码中做了注释。连接假设本地HBase服务器运行在默认端口上,且表格尚不存在。注意数据以批处理put操作的方式插入,每个列值一个。每个put操作指定column family,column qualifier与值,而版本是由系统自动分配的。也许在上传数据中最重要的部分就是row key的构建方式。HBase赋予了为插入的每行创建唯一key的自由,选个好的就像是某种艺术。在样例中,我们选中了罪犯的姓名加上被捕日期,当然前提是一个人不能在同一天被捕两次(这不算很可靠的假设)。 


现在可以试试Spark了。文件是ProcessData.java,也在注释中了,不过这里我会稍微提一下。 


一些环境对象与配置对象需要初始化:


【干货】在HBase、Spark和HDFS中安装示例应用程序


HBase的配置对象会告诉客户端服务器的位置等信息,本例采用默认值。下一行,Spark配置给出了一个应用名称,然后给出运算主驱动的位置——本例用的内置驱动可使用两个并发线程。Spark架构包含主驱动,worker也在一个集群中。远程主驱动的位置可能会像这样:spark://masterhost:7077 然后创建Spark环境,因为原本的Scale API不太容易在Java中使用,我们使用JavaSparkContext 。然后用HBase-Spark模块创建一个名为JavaHBaseContext的东西,它可以用Spark数据模块与HBase实例通讯,可以做批量插入、删除,扫描HBase表格等。最后我们创建环境对象,代表Spark数据集顶端的SQL层。注意SQL环境对象不依赖于HBase。事实上,不同的数据来源都能代入同一个SQL处理API,只要有办法relationalize。例如,有模块允许像处理Spark SQL数据一样处理来自MongoDB的数据。事实上federated数据环境可以用Spark集群执行关系连接,将MongoDB collection与HBase表格连接起来(还有flat文件等)。


现在从HBase读取文件,一般是通过扫描。可以执行一些筛选操作,不过没有通用的查询语言。类似Apache Phoenix在Spark与其他框架的角色。此外扫描HBase行可得到二进制值,需要转化为合适的runtime Java类型。因此对于每个列值,必须自行管理其类型,并执行转换。HBase API有一个工具类名为Bytes,可以处理所有的基础Java类型。我们用JSON作为数据架构,这样每个列值先被转换为JSON值:


【干货】在HBase、Spark和HDFS中安装示例应用程序


获得HBase结果行之后,我们为被捕记录创建JSON对象:


【干货】在HBase、Spark和HDFS中安装示例应用程序


这将从行式二进制 HBase映射到runtime JSON架构,我们可以用JSON构建整张表格的Spark RDD:


【干货】在HBase、Spark和HDFS中安装示例应用程序


然后筛选并转化数据。例如:data = data.filter(j -> j.at("name").asString().contains("John")); 这个命令可以得出一个新的数据集,只包含罪犯John。JavaRDD实例是数据集的抽象代表。一旦调用过滤或转化方式,就会引入新数据集的抽象代表,但实际上并不计算结果。一旦调用action method,就会返回与RDD不同的值,触发延迟计算并生成实际数据集。例如,collect和count都是这类action method。


 好了。运行ProcessData.main应当输出类似内容:


【干货】在HBase、Spark和HDFS中安装示例应用程序


4

Hadoop

为了做总结,我会展示如何用Hadoop/HDFS来存储HBase数据,而不是一般的OS filesystem。首先,从这里下载Hadoop。我用了2.7.1版本。可以解压tarball/zip文件到标准位置,比如在Linux上是/opt/hadoop。在启动前有两步重要的配置: 


1. 指向JVM。需要至少Java7。编辑etc/hadoop/hadoop-end.sh(or hadoop-env.cmd),修改line export JAVA_HOME=${JAVA_HOME} ,指向Java;除非OS/shell环境已经做了这些工作。 

2. 下面需要配置Hadoop存储数据的位置,以及客户端的访问链接。客户端链接在etc/hadoop/core-site.xml文件中配置:



数据位置在etc/hadoop/hdfs-site.xml文件中。实际上有两个位置:一个是Hadoop Namenode,一个是Hadoop Datanode:


【干货】在HBase、Spark和HDFS中安装示例应用程序


3. 在启动HDFS前,需要格式化namenode:bin/hadoop namenode -format 

4. 启动Hadoop时,只需运行命令启动HDFS:sbin/start-dfs.sh。确保已经配置的目录有写入权限。 

5. 在Hadoop启动后,在http://localhost:50070上没看到admin web UI,查看日志。 

6. 将HBase与Hadoop连接,必须修改HBase根目录到HDFS中:




7. 重启HBase,回到空数据库中,可以在HBase shell中用list命令验证。现在试着运行导入程序,然后用“数据处理(data crunching)”程序查看结果。


来源:大数据分析挖掘




大数据分析挖掘 一个有深度的公众号

纯纯的干货等着你




阅读原文是个好东西

以上是关于干货在HBaseSpark和HDFS中安装示例应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 alpine:3.8 中安装 Nodejs 8.12?

在CDH5.14.2中安装Phoenix与使用

如何在 Service Fabric 中安装批处理文件

如何在ubunto中安装docker

如何在docker中安装vsftp

无法在 Windows phone 和 iOS 中安装 Phonegap 构建的应用程序