大数量学习体系之二 —– HBase环境搭建(单机)

一、控制流

从接触面向进度语言开始,使用控制流编程的定义已是司空眼惯。

if (condition) {
  // do something
} else {
  // do something else
}

分支循环是最常见的控制流格局。由于决定规范的存在,总有一对代码片段会履行,另一片段不会履行。

在决定流中,想要举行数据传递,最重点的是看重于变量封存中间状态。因而,控制流编程看起来是将数据嵌套在决定流内的编程形式。

行使变量保存程序状态有个很大的优势。通过变量缓存,能够将编程职务划分为不一样的级差,每个阶段只须要做到部分效用子逻辑即可,那大大降低了复杂流程的沉思开销。

但与此同时,也有一个比较大的逆风局,就是在分布式处理环境下,中间状态的保安一向是一个很麻烦的题材。那从另一个上边加大了程序设计的工本。

引言

在上一篇中搭建了Hadoop的单机环境,这一篇则搭建HBase的单机环境

二、数据流

而数据流编程的概念最初可以找寻到函数式编程语言,以及灵感来源此的FlumeJava类系统(如斯Parker、Flink等)的编程API。

rdd.map(lambda).filter(lambda).reduce(lambda);

那种接近管道流水线格局的编程接口,每一遍处理的数据是列表方式的(LISP)。当然,那么些列表放在分布式环境下换了一个新的名词——分布式数据集(RDD/DataSet)。

数据流编程最大的风味是空洞了增加的算子,通过UDF为算子指定用户处理逻辑。因而,数据流编程其实蕴涵了支配流嵌套在数码流内的编程形式。

应用数据流编程最大的优势就是无需选取变量维护总结中间状态,其它基本的列表数据格式天然满意分布式数据存储的需求。这也是函数式语言在我宣传时相比讲究的一个优势:对并行计算帮忙得更好。

只是,数据流编程的措施也并不是应有尽有。由于事先设计好的流水线结构,导致了数码处理不可以独立地采纳流水线分支进行拍卖。所以,有时候看似很简短的决定逻辑,使用数据流表达时就呈现比较麻烦。

条件准备

三、数据流表明的控制流

比如说:下边的主宰流程使用控制流编程很好发挥。

图片 1

if (arg > MAX) {
  vertices = vertices.map(lambda);
} else {
  vertices = vertices.filter(lambda);
}
return vertices;

此处的参数arg可能出自用户输入,或者Spark/Flink
driver提供的变量。这种使用driver的单机控制流全局统筹的主意就像是缓解了数据流采取选拔流水线管道的目标,可是实际这是经过双重提交新任务的法子成功的。即规范为真时,才会交到true分支内的推测职分,否则提交false分支的计量任务。

若是不看重driver,该怎么表明类似的道岔控制流程呢?

图片 2

借使参数arg的品种也是分布式数据集类型DataSet<Integer>,它恐怕出自上游流水线的高中级结果,那么表明分支控制流计算可能须要如下类似措施:

// 条件数据集
DataSet<Boolean> condition = arg.map(v -> v > MAX);

// 数据集 true/false 分离
DataSet<Tuple2<Vertex, Boolean>> labelVs = vertices.join(condition);
DataSet<Vertex> trueVs = labelVs.filter(v -> v.f1).map(v -> v.f0);
DataSet<Vertex> falseVs = labelVs.filter(v -> !v.f1).map(v -> v.f0);

// 各自分支处理
trueVs = trueVs.map();
falseVs = falseVs.filter();

return trueVs.union(falseVs);

此地通过将参数DataSet与输入数据集vertices做join,然后分别(按原则true/false
filter)出多个新的数据集trueVs和falseVs。当规则为true时,trueVs就是本来数据集vertices,而falseVs为空数据集,反之则反。然后继续只要分别对那三个数据集做相应的处理,最终把处理结果union合并起来就达到了目的。

因此如此的法门,实际上是而且实施了规范的true和false的分层逻辑,只不过其余时候总有一个支行的流水线上的多少集为空罢了。

1,服务器选拔

阿里云服务器:入门型(按量付费)
操作系统:linux CentOS 6.8
Cpu:1核
内存:1G
硬盘:40G

四、思考

透过前边的议论,可以博得一些相比精通的定论:

  • 控制流天然擅长描述控制逻辑,不过使用变量缓存中间结果不便于分布式总计抽象。
  • 多少流天然对分布式并行计算协理美好,不过在讲述控制逻辑时体现格外疲软。

在测算编程语言设计领域,对控制流和数据流的研商不断。如何让开发者更好的主宰那两类概念也在相连地研商,要不然也不会晤世面向进度和函数式编程等各样编程范式。

而近来主流的乘除连串,如Flink、Spark等,基本上处在选择driver的定义表明控制流,使用算子连接数据流那样的情势。不过那都是确立在driver通过全局collect操作,将数据集的数目拉取到driver基础之上的。本质上是driver依照条件分支的运行时结果,重新提交义务而已,那称不上一个完美的设计。因为,它并不曾到位让多少流具备自主拔取流水线的能力。

那什么样让多少流具备自主挑选流水线的能力呢?说白了,自主挑选流水线,本质上是拥有职分运行时修改职责履行安插的力量,也就是所谓的动态DAGRay的统筹中,函数是焦点的义务调度单元,而非将UDF连接起来的DAG,或许那种底层的任务抽象能力对于表明动态DAG的力量有着更大的优势。

详尽精晓Ray的设计,可以参照文章:高质量分布式执行框架——Ray

自家的博客即将联合至腾讯云+社区,约请大家一同入驻。

2,配置选择

JDK:1.8 (jdk-8u144-linux-x64.tar.gz)
Hadoop:2.8.2 (hadoop-2.8.2.tar.gz)
HBase:1.6.2 (hbase-1.2.6-bin.tar.gz)

3,下载地址

官网地址:
JDK:
http://www.oracle.com/technetwork/java/javase/downloads

Hadopp:
http://www.apache.org/dyn/closer.cgi/hadoop/common
HBase:
http://mirror.bit.edu.cn/apache/hbase/

百度云:
链接:https://pan.baidu.com/s/1jIemnA2 密码:3ykr

二、服务器的连锁安顿

在安顿Hadoop从前,应该先做一下安插

1,更改主机名

首先更改主机名,目标是为了方便管理。
输入:
hostname
翻开本机的称谓
下一场输入:

vim /etc/sysconfig/network

修改主机名称
将HOSTNAME 的称号改变为您想要设置的称号
图片 3
:主机名称改成之后,要重启(reboot)才会生效。

输入

vim /etc/hosts

添加 主机IP 和对应的主机名称,做映射。

图片 4
注:在安顿文件中接纳主机名的话,那一个映射必须做!

2,关闭防火墙

闭馆防火墙,方便外部访问。
CentOS 7版本以下输入:
关闭防火墙
service iptables stop
CentOS 7 以上的本子输入:
systemctl stop firewalld.service

3,时间设置

输入:
date
翻开服务器时间是还是不是一致,若不均等则改变
转移时间命令

date -s ‘MMDDhhmmYYYY.ss’

三、HBase环境设置

1,下载HBase

将下载下来的HBase的配备文件进行解压
在linux上输入:

 tar  -xvf   hbase-1.2.6-bin.tar.gz

下一场移动到/opt/hbase 里面
输入

mv  hbase-1.2.6  /home/hbase

2,HBase环境安排

3.2.1 环境安顿

编辑 /etc/profile 文件
输入:

export HBASE_HOME=/home/hbase/hbase-1.2.6
export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HBASE_HOME}/bin:$PATH

图片 5
输入:

source  /etc/profile

使配置生效
输入

hbase version 

查阅版本
图片 6

3.2.2 修改配置文件

在 root目录下新建文件夹

mkdir  /root/hbase  
mkdir  /root/hbase/tmp  
mkdir  /root/hbase/pids

图片 7
切换到 /home/hbase/hbase-1.2.6/conf 下

3.2.2.1 修改hbase-env.sh

编制 hbase-env.sh 文件,添加以下配置

export JAVA_HOME=/home/java/jdk1.8
export HADOOP_HOME=/home/hadoop/hadoop2.8
export HBASE_HOME=/home/hbase/hbase-1.2.6
export HBASE_CLASSPATH=/home/hadoop/hadoop2.8/etc/hadoop
export HBASE_PID_DIR=/root/hbase/pids
export HBASE_MANAGES_ZK=false

图片 8
证实:配置的门路以相好的为准。HBASE_MANAGES_ZK=false
是不启用HBase自带的Zookeeper集群。

3.2.2.2 修改 hbase-site.xml

编辑hbase-site.xml 文件,在增加如下配置

<!-- 存储目录 -->
<property>  
 <name>hbase.rootdir</name>  
 <value>hdfs://test1:9000/hbase</value>  
 <description>The directory shared byregion servers.</description>  
</property>  
<!-- hbase的端口 -->
<property>  
 <name>hbase.zookeeper.property.clientPort</name>  
 <value>2181</value>  
 <description>Property from ZooKeeper'sconfig zoo.cfg. The port at which the clients will connect.  
 </description>  
</property>  
<!--  超时时间 -->
<property>  
 <name>zookeeper.session.timeout</name>  
 <value>120000</value>  
</property>  
<!--  zookeeper 集群配置。如果是集群,则添加其它的主机地址 -->
<property>  
 <name>hbase.zookeeper.quorum</name>  
 <value>test1</value>  
</property>  
<property>  
 <name>hbase.tmp.dir</name>  
 <value>/root/hbase/tmp</value>  
</property>  
<!-- false是单机模式,true是分布式模式  -->
<property>  
 <name>hbase.cluster.distributed</name>  
 <value>false</value>  
</property>

图片 9
阐明:hbase.rootdir:那些目录是region server的共享目录,用来持久化Hbase
。hbase.cluster.distributed
:Hbase的运转形式。false是单机形式,true是分布式格局。若为false,Hbase和Zookeeper会运行在同一个JVM里面。

4,HBase启动

在中标启动Hadoop之后
切换到HBase目录下
cd /home/hbase/hbase-1.2.6/bin
输入:
./start-hbase.sh
图片 10

在浏览器输入:
http://39.108.208.105:16010/
图片 11

浮现这些界面则成功!

HBase shell 使用

HBase启动之后
输入:
HBase shell
进入hbase
然后输入list 查询有如何表
因为HBase是列式存储结构,所以在建表方面和传统的关系型数据库分歧
新建一个用户表 t_user
添加四个列族 st1 和 st2

create 't_user','st1','st2'

给那张表添加数据
添加 主键 、列 和值

put 't_user','1001','st1:age','18'

put 't_user','1001','st2:name','zhangsan'

下一场 查询该表数据

scan 't_user'

查看表结构

describe 't_user'

去除记录

delete't_user','1001','st1:age'

删除表
删去表首先要屏蔽该表

disable 't_user'

删除

drop 't_user'

图片 12
图片 13

发表评论

电子邮件地址不会被公开。 必填项已用*标注