大数据Hadoop2.7+zookeeper+Hbase+Hive完全分布式搭建

最近在新电脑上配置大数据开发环境,踩了不少坑,更具网上的一些方法整理了一套比较简单的hadoop+zookeeper+hbase+hive环境的搭建(由于虚拟机环境均以root用户操作);

  • 除了zookeeper的myid,其他设置所有虚拟机上都一样,所以可以一台虚拟机全部安装配置完以后直接完全克隆几个,再配置单独的静态ip,hostname和myid即可;
  • 当然最稳妥的是配置完ssh后直接克隆,每配置完一个工具以后scp到各个节点下,每装完一个工具后都测试运行一下,确保无误;
  • 要养成每次成功安装完一个工具后都快照的习惯,无数突发情况带来的教训啊;

所需环境和工具

  • VMware虚拟机
  • CentOS7并配置好各个节点的静态ip(先装一台CentOS,最后再克隆多台
  • JDK1.8
  • mysql5.7
  • Xshell或FinalShell

HostName及HOST配置

由于分布式环境需要连接各个节点的linux系统,为了方便我们需要配置了HostName主机名和hosts文件;

1. 设置hostname

hostnamectl set-hostname susur1 #susur1为1号节点名

2. 查看hostname

[root@susur1 ~]# hostname
susur1

显示出你配置的hostname就算成功了;

3. 配置hosts文件(地址/etc/hosts)

vim /etc/hosts

将这个追加的hosts文件最下面(格式为:节点ip + 节点hostname);

192.168.160.129 susur1
192.168.160.130 susur2
192.168.160.131 susur3

你也可以将这段hosts代码加到主机的hosts文件,这样就可以方便的通过hostname访问虚拟机上的linux系统;

======MacOS的地址和Linux的一样====,Windows的地址为C:\Windows\System32\drivers\etc;==

配置成功以后测试一些可不可以ping通;

hekaideMacBook-Pro:~ hekai$ ping susur1
PING susur1 (192.168.160.129): 56 data bytes
64 bytes from 192.168.160.129: icmp_seq=0 ttl=64 time=0.260 ms
64 bytes from 192.168.160.129: icmp_seq=1 ttl=64 time=0.222 ms
64 bytes from 192.168.160.129: icmp_seq=2 ttl=64 time=0.182 ms

配置ssh免密钥登陆

为了保证分布式环境下各个节点直接可以无障碍相互访问,我们需要配置ssh密钥保证各个节点可以相互免密钥登陆;

1. 查看ssh是否启动

systemctl status sshd.service

如果报命令不存在的话需要安装ssh

2. yum安装ssh(ubuntu是apt)

yum install -y openssl openssh-server

3. 修改配置文件

ssh连接时如果报权限错误,我们需要修改sshd配置文件,打开权限;

# 输入指令
vim /etc/ssh/sshd_config
# 将 PermitRootLogin, RSAAuthentication, PubkeyAuthentication 设置为 yes

4.启动ssh服务

#开启ssh服务
systemctl start sshd.service
#设置开机运行
systemctl enable sshd.service
#重启ssh服务
systemctl restart sshd.service

5.生成ssh公钥私钥

####一路回车即可
[root@susur1 ~]]#  ssh-keygen -t rsa

6.设置.ssh文件访问权限

#在root目录下
cd ~
chmod 700 .ssh
chmod 600 .ssh/*
ls -la .ssh

7.拷贝公钥

在生成完公钥和私钥之后.ssh文件目录下为:

-rw-------. 1 root root 1679 Sep 24 20:15 id_rsa
-rw-r--r--. 1 root root  393 Sep 24 20:15 id_rsa.pub
-rw-r--r--. 1 root root  552 Sep 25 11:33 known_hosts

我们将id_rsa.pub复制为authorized_keys

cp id_rsa.pub authorized_keys

#这里解释一下:在别的教程中的方式是将公钥文件复制到别的节点下的.ssh文件中的,这样确实是规范的;
#ssh免密钥登陆的原理是通过私钥验证对应的公钥完成免密钥登陆;
#由于我们最后再直接克隆系统所有信息都是一样,所以只需要在一台机器上配置即可,无需传输公钥文件;

8.验证ssh免密钥(克隆系统以后验证)

ssh susur2 #hostname

ZooKeeper安装及配置

  • 首先从官网上下载合适的zookeeper版本 我下载的是3.4.14(3.5的版本我之前测试的时候不稳定)

<html>
https://www.apache.org/dyn/closer.cgi/zookeeper/
</html>

将下载的tar包上传到Linux系统
  • 解压tar包
mkdir /usr/local/zookeeper #新建zookeeper目录

tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local/zookeeper/ #解压到zookeeper目录
  • 进入到conf目录下配置配置文件
cd /usr/local/zookeeper/zookeeper-3.4.14/conf
cp zoo_sample.cfg zoo.cfg#默认是没有zoo.cfg的所有要将zoo_sample.cfg改名
vim zoo.cfg#配置zoo.cfg
    • 需要修改的部分
#修改data文件目录
dataDir=/usr/local/zookeeper/zookeeper-3.4.14/data

#zookeeper集群的节点,添加到末尾
server.1=susur1:2888:3888
server.2=susur2:2888:3888
server.3=susur3:2888:3888
  • 创建data文件目录
mkdir -p /usr/local/zookeeper/zookeeper-3.4.14/data
  • 设置当前zookeeper的权值(1号节点为1,2号节点为2,3号节点为3...)
echo 1 > /usr/local/zookeeper/zookeeper-3.4.14/data/myid
  • 配置环境变量
vim /etc/profile

#zookeeper
export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.14
export PATH=$ZOOKEEPER_HOME/bin:$PATH
  • 启动zookeeper集群(每个节点都要启动)
zkServer.sh start
zkServer.sh status
zkServer.sh stop

搭建hadooper*

http://hadoop.apache.org/releases.html 同上官网下载tar包(下载bin版本)我用的是版本是2.7.7

  • 上传Linux 解压
mkdir /usr/local/hadoop

tar -zxvf hadoop-2.7.7.tar.gz -C /usr/local/hadoop/
  • 修改配置文件(hadoop的配置文件所有节点都一样即可,最后克隆完即可运行)
cd /usr/local/hadoop/hadoop-2.7.7/etc/hadoop
  • 配置JAVA_HOME
    • hadoop-env.sh
    • mapred-env.sh
    • yarn-env.sh

将这个三个文件中的JAMA_HOME路径改为系统上的jdk路径

export JAVA_HOME=/usr/local/java/jdk1.8.0_221/
  • core-site.xml
  <property>
  <name>fs.defaultFS</name>
  <value>hdfs://susur</value>
  </property>
  <property>
  <name>ha.zookeeper.quorum</name>
  <value>susur1:2181,susur2:2181,susur3:2181</value>
  </property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
  <property>
  <name>hadoop.tmp.dir</name>
  <value>/usr/local/hadoop/hadoop-2.7.7/tmp</value>
  </property>
  • hdfs-site.xml
 <property>
        <name>dfs.nameservices</name>
        <value>susur</value>
    </property>
    <property>
        <name>dfs.ha.namenodes.susur</name>
        <value>nn1,nn2</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.susur.nn1</name>
        <value>susur1:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.susur.nn2</name>
        <value>susur2:8020</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.susur.nn1</name>
        <value>susur1:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.susur.nn2</name>
        <value>susur2:50070</value>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://susur1:8485;susur2:8485;susur3:8485/susur</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/var/tmp/hadoop/ha/jn</value>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.susur</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
        <value>shell(true)</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_dsa</value>
    </property>
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
   
   <!--访问免验证-->
   <property>
        <name>dfs.permissions</name>
        <value>false</value>
        <description>
            If "true", enable permission checking in HDFS.
            If "false", permission checking is turned off,
            but all other behavior is unchanged.
            Switching from one parameter value to the other does not change the mode,
            owner or group of files or directories.
        </description>
    </property>
  • mapred-site.xml
<property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
</property>

<property>
   <name>mapreduce.jobhistory.address</name>
   <value>susur1:10020</value>
</property>
<property>
   <name>mapreduce.jobhistory.webapp.address</name>
   <value>susur1:19888</value>
</property>
  • yarn-sit.xml

  <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
  </property>
  
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>mr_susur</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>susur3</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>susur1</value>
  </property>
  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>susur1:2181,susur2:2181,susur3:2181</value>
  </property>
  • 修改slaves(hadoop3.0以上是workers)
susur1
susur2
susur3
  • 配置环境变量
    • vim /etc/profile
#hadoope
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
  • 启动hadoop(启动前所有节点都需先启动zookeeper,status确认状态)
    • [susur123]启动JournalNode
      • [susur123] hadoop-daemon.sh start journalnode
    • 格式化NameNode[a,s]
      • [susur1] hdfs namenode -format
      • [susur1] hadoop-daemon.sh start namenode
      • [susur2] hdfs namenode -bootstrapStandby
    • 格式化ZKFC
      • [susur1] hdfs zkfc -formatZK
    • 启动集群(只需1号节点启动)
start-dfs.sh
  • JPS查看状态
#如主节点上的jps如下
[root@susur1 ~]# jps
49536 JournalNode
45713 QuorumPeerMain
50130 NodeManager
49253 DataNode
50469 Jps
49080 NameNode
49944 ResourceManager
49773 DFSZKFailoverController

访问网页 susur1:50070(要访问主节点,status查看zookeeper的主节点是哪个)

Hbase安装与配置

https://hbase.apache.org/downloads.html
官网下载合适的版本,我下的是1.3.5,上传到Linux 解压tar包(下载bin包);

mkdir /usr/local/hbase

tar -zxvf hbase-1.3.5-bin.tar.gz -C /usr/local/hbase
  • 修改配置文件

    • cd /usr/local/hbase/hbase-1.3.5/conf/
    • 配置 RegionServer
    • vim regionservers
      
      susur1
      susur2
      susur3
      
    • 配置备用节点 backup-masters(没有就新建)
    • vim backup-masters
      
      susur1
      
    • 配置Hbase核心配置文件
    • vim hbase-site.xml
      
      <property>
      <name>hbase.rootdir</name>
      <value>hdfs://susur/hbase</value>
      </property>
      <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
      </property>
      <property>
      <name>hbase.zookeeper.quorum</name>
      <value>susur1:2181,susur2:2181,susur3:2181</value>
      </property>
      
    • 拷贝hbfs-site.xml到hbase的conf目录下
    • cp /usr/local/hadoop/hadoop-2.7.7/etc/hadoop/hdfs-site.xml /usr/local/hbase/hbase-1.3.5/conf
      
    • 配置环境变量
    • vim /etc/profile
      
      #hbase
      export HBASE_HOME=/usr/local/hbase/hbase-1.3.5
      export PATH=$HBASE_HOME/bin:$PATH
      
    • 克隆完后启动
  • 启动集群

zkServer.sh start
start-all.sh
[3] yarn-daemon.sh start resourcemanager

-启动HBase

[1] start-hbase.sh
  • 访问网址 susur1:16010

安装配置Hive

  • mysql新建hive数据库
#由于hive是基于mysql存储的所以需要一个对应的库

create database hive;
mkdir /usr/local/hive

tar -zxvf apache-hive-2.3.6-bin.tar.gz -C /usr/local/hive
  • 修改配置文件hive-site.xml
cp hive-default.xml.template hive-site.xml
vim hive-site.xml

<!--设置库名-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/hive</value>
</property>
<!--配置RDBMS本地存储-->
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<!--配置mysql连接,如果没有hive库则新建-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
</property>

<!--配置jdbc驱动-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!--mysql用户名root-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!--配置mysql密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
cp /usr/local/hive/apache-hive-2.3.6-bin/lib/jine-2.12.jar /usr/local/hadoop/hadoop-2.7.7/share/hadoop/yarn/lib
  • 配置环境变量
vim /etc/profile

#hive
export HIVE_HOME=/usr/local/hive/apache-hive-2.3.6-bin
export PATH=$HIVE_HOME/bin:$PATH

  • 启动Hive
hive

注意事项以及一些可能会遇到的问题

  • 这套分布式环境是基于zookeeper做节点的管理的,hbase和hive都是为依赖与hadoop环境的,所以启动顺序为zookeeper -> hadoop -> hbase -> hive
  • 环境变量配置完记得 source /etc/profile !!!!!!!
  • 如果在hql处理中特别慢,优先适当增加主节点分配的内存和cpu核心;
  • 如果遇到zookeeper启动完status显示not running 可能是防火墙问题
#关闭防火墙
systemctl stop firewalld.service
#禁止开机启动
systemctl disable firewalld.service 
  • ssh登陆默认是同用户名,所以要保证每台虚拟机上的用户名相同,如果主机ssh虚拟机请设置登陆用户
  • 格式化namenode报错,先检查各个节点上的JournalNode是否启动,然后删除生成的数据和日志文件,我这里设置的是Hadoop目录下的tmp目录,吧tmp删除后重新hdfs namenode -format
  • mysql设置密码报密码太简单,请修改密码限制
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
  • mysql连接时报错,设置mysql权限
grant all privileges on *.* to 'root'@'%' identified by '123456';

如果主机navicat连接虚拟机上的mysql,设置ssh连接

  • eclipse(idea)连接hadoop时报权限错误,或者没有找着文件目录,都是权限问题修改hdfs-site.xml文件,关闭权限验证,这里我已经给你们关了

      <!--访问免验证-->
       <property>
            <name>dfs.permissions</name>
            <value>false</value>
            <description>
                If "true", enable permission checking in HDFS.
                If "false", permission checking is turned off,
                but all other behavior is unchanged.
                Switching from one parameter value to the other does not change the mode,
                owner or group of files or directories.
            </description>
        </property>
    
    //Java代码中设置hadoop登陆用户"root"
    Properties properties = System.getProperties();
    properties.setProperty("HADOOP_USER_NAME", "root");
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容