大数据2-Hadoop伪分布式+ZK+HDFS

目录:

  1、hadoop介绍

  2、虚拟机配置

       3、zookeeper

  4、hdfs搭建

大数据解决四大核心问题:

  1. 数据的存储(Big Data Storage),海量数据需要处理和分析,但前提是要进行有效的存储。Hadoop的诞生突破了传统数据文件系统的单机模式。HDFS使得数据可以跨越不同的机器与设备,并且用一个路径去管理不同平台上的数据。

  2. 数据的计算(Data Calculation),在数据有效存储的基础上,对数据的统计和分析本质上就是数据的计算。在大数据领域常见的计算工具有MapReduceSpark等。

  3. 数据的查询(Consensus Data),对大数据进行有效管理的核心指标是数据查询技术。其中NoSQL (Not Only SQL)应用较为广泛,能较有效解决数据的随机查询,其中就主要包括Hbase等。从本质而言,依旧是Hadoop模式下的数据查询。

  4. 数据的挖掘(Data mining),Hive数据仓库为数据的挖掘提供了基础,通过分类、预测、相关性分析来建立模型进行模式识别、机器学习从而构建专家系统。

 

Hadoop之父

 

    大牛,他是LuceneNutch Hadoop等项目的发起人。是他,把高深莫测的搜索技术形成产品,贡献给普通大众;还是他,打造了在云计算和大数据领域里如日中天的Hadoop。他是某种意义上的盗火者(普罗米修斯盗火造福人类),他就是Doug Cutting

 

    Hadoop是项目的总称。主要是由HDFSMapReduce组成。HDFSGoogle File SystemGFS)的开源实现。MapReduceGoogle MapReduce的开源实现。

    Hadoop的诞生突破了传统数据文件系统的单机模式。使得数据可以跨越不同的机器与设备,并且用一个路径去管理不同平台上的数据。

    MapReduce的计算模型分为MapReduce两个过程。在日常经验里,我们统计数据需要分类,分类越细、参与统计的人数越多,计算的时间就越短,这就是Map的形象比喻,在大数据计算中,成百上千台机器同时读取目标文件的各个部分,然后对每个部分的统计量进行计算,Map就是负责这一工作的;而Reduce就是对分类计数之后的合计,是大数据计算的第二阶段。可见,数据的计算过程就是在HDFS基础上进行分类汇总。

 

    HDFS把节点分成两类:NameNodeDataNodeNameNode是唯一的,程序与之通信,然后从DataNode上存取文件。这些操作是透明的,与普通的文件系统API没有区别。

    MapReduce则是JobTracker节点为主,分配工作以及负责和用户程序通信。

    HDFSMapReduce实现是完全分离的,并不是没有HDFS就不能MapReduce运算。

    Hadoop也跟其他云计算项目有共同点和目标:实现海量数据的计算。而进行海量计算需要一个稳定的,安全的数据容器,才有了Hadoop分布式文件系统(HDFSHadoop Distributed File System)。

    HDFS通信部分使用org.apache.hadoop.ipc,可以很快使用RPC.Server.start()构造一个节点,具体业务功能还需自己实现。针对HDFS的业务则为数据流的读写,NameNode/DataNode的通信等。

    MapReduce主要在org.apache.hadoop.mapred,实现提供的接口类,并完成节点通信(可以不是hadoop通信接口),就能进行MapReduce运算。

 

集群规划:

  

主机名

IP

进程(jps)

hadoop01

192.168.163.129

ZooKeeper(QuorumPeerMain)

Hadoop

HDFS

Flume

Hive

hadoop02

192.168.163.130

ZooKeeper(QuorumPeerMain)

hadoop03

192.168.163.131

ZooKeeper(QuorumPeerMain)

          

          

 

  子项目

      Hadoop Common: 0.20及以前的版本中,包含HDFSMapReduce和其他项目公共内容,从0.21开始HDFSMapReduce被分离为独立的子项目,其余内容为Hadoop Common

      HDFS: Hadoop分布式文件系统(Distributed File System) HDFS (Hadoop Distributed File System)

      MapReduce:并行计算框架,0.20前使用 org.apache.hadoop.mapred 旧接口,0.20版本开始引入org.apache.hadoop.mapreduce的新API

      HBase: 类似Google BigTable的分布式NoSQL列数据库。(HBaseAvro已经于20105月成为顶级 Apache 项目)

      Hive:数据仓库工具,由Facebook贡献。

      Zookeeper:分布式锁设施,提供类似Google Chubby的功能,由Facebook贡献。

      Avro:新的数据序列化格式与传输工具,将逐步取代Hadoop原有的序列化机制。

      Pig: 大数据分析平台,为用户提供多种接口。

      AmbariHadoop管理工具,可以快捷的监控、部署、管理集群。

      Sqoop:于在HADOOP与传统的数据库间进行数据的传递。

 

 

 配置虚拟机

    HDFS由java编写,需要jdk支持

     docker官方文档要求必须运行在Linux kernel 3.8以上,所以需要安装在Centos7或者Ubantu系统上。

      yum install lrzsz      #安装上传下载组件

      uname –a       #检查当前Linux内核版本

        查询结果:Linux tdocker 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

 

     配置IP地址

       修改配置文件

        cd /etc/sysconfig/network-scripts #进入网络配置目录

        dir ifcfg* #找到网卡配置文件

        ifcfg-eno16777736  ifcfg-lo

        vi ifcfg-eno16777736

       配置文件内容

        TYPE=Ethernet

        BOOTPROTO=static #改成static,针对NAT

        NAME=eno16777736

        UUID=4cc9c89b-cf9e-4847-b9ea-ac713baf4cc8 

        DEVICE=eno16777736 

        ONBOOT=yes #开机启动此网卡 

        IPADDR=192.168.163.30 #固定IP地址 

        NETMASK=255.255.255.0 #子网掩码 

        GATEWAY=192.168.163.2 #网关和NAT自动配置的相同,不同则无法登录 

        DNS1=192.168.163.2 #和网关相同 

       测试 

        centos7 命令发生巨大变化 

        ip addr #查看IP地址 ip add 

        service network restart #重启网络 

        systemctl restart network.service #重启网络centos7 

        vi /etc/hosts #127.0.0.1 dredis 

        hostname dreids #注意必须修改机器名hostname 

        ping www.baidu.com #如果出现baiduip地址则表示网络连通 

 

    配置域名解析

      1、windows配置

        C:\Windows\System32\drivers\etc\hosts 

          192.168.163.129 hadoop01 

          192.168.163.130 hadoop02 

          192.168.163.131 hadoop03 

      2、linux虚拟机配置hosts

        vi /etc/hosts 

          192.168.163.129 hadoop01 

          192.168.163.130 hadoop02 

          192.168.163.131 hadoop03 

         hostname hadoop01 #修改每台服务器的机器名,必须 

      3、重启网络

        /etc/init.d/network restart 

        或者 

        service network restart 

      4、ssh免登陆

        在虚拟机中Terminal中执行下面语句 

          ssh-keygen #三次回车即可 

          ssh-copy-id -i .ssh/id_rsa.pub root@192.168.163.130 #复制密钥 

          ssh 192.168.163.130 

      5、安装jdk配置环境变量

zk首先需要安装jdk环境。
mkdir /usr/local/src/java        #按习惯用户自己安装的软件存放到/usr/local/src目录下
上传jdk tar包                    #利用SSH工具软件上传文件
tar -xvf jdk-7u51-linux-x64.tar.gz    #解压压缩包
配置环境变量
1)vi /etc/profile
2)在尾行添加
#set java environment
JAVA_HOME=/usr/local/src/java/jdk1.7.0_51
JAVA_BIN=/usr/local/src/java/jdk1.7.0_51/bin
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
保存退出
3)source /etc/profile 使更改的配置立即生效
4)java -version 查看JDK版本信息。如显示1.7.0证明成功。
jdk及环境配置

 

      6、关闭防火墙

systemctl stop firewalld.service            #关闭防火墙服务
systemctl disable firewalld.service        #禁止防火墙开启启动
或者
systemctl restart iptables.service        #重启防火墙使配置生效
systemctl enable iptables.service         #设置防火墙开机启动
检查防火墙状态
[root@hadoop01 ~]# firewall-cmd --state        #检查防火墙状态
not running                                    #返回值,未运行

 

 

 

    Zookeeper安装配置 

        在Zookeeper集群环境下只要一半以上的机器正常启动了,那么Zookeeper服务将是可用的。因此,集群上部署Zookeeper最好使用奇数台机器,这样如果有5台机器,只要3台正常工作则服务将正常使用。 

      ZooKeeper介绍 

        ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是GoogleChubby一个开源的实现,是HadoopHbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

 

官网:http://www.apache.org/dist/zookeeper/
cd /usr/local/src                #安装文件根目录
mkdir zk                        #安装路径
tar -xvf zookeeper-3.4.8.tar.gz    #解压
cd zookeeper-3.4.8                #进入目录
mkdir log                        #创建日志文件路径
mkdir data                        #创建数据文件路径,默认/tmp/zookeeper下
cd data                            #进入数据目录
vi myid                            #创建myid文件,内容1对应zoo.cfg中配置的server.1范围:1~255之间的整数,在集群中必须唯一
cd ..                            #退到上级目录
cd conf                            #进入配置目录
cp zoo_sample.cfg zoo.cfg        #复制模板文件
安装zookeeper
tickTime=2000                            #tickTime心跳时间,
clientPort=2181                        #访问端口
dataDir=/usr/local/src/zk/zookeeper-3.4.8/data        #设置日志路径
dataLogDir=/usr/local/src/zk/zookeeper-3.4.8/log    #增加设置日志路径
server.1=hadoop01:2888:3888        #集群最少3个节点,可按机器名
server.2=hadoop02:2888:3888        #2888指follower连leader端口 
server.3=hadoop03:2888:3888        #3888指定选举的端口
配置zoo.cfg
Centos6.5
/sbin/iptables -I INPUT -p tcp --dport 2181 -j ACCEPT     #打开端口
/etc/rc.d/init.d/iptables save                            #修改生效
/etc/init.d/iptables status                                #查看配置
Centos7
firewall-cmd --zone=public --add-port=2181/tcp --permanent #开端口
firewall-cmd --zone=public --add-port=2888/tcp --permanent #开端口
firewall-cmd --zone=public --add-port=3888/tcp --permanent #开端口
firewall-cmd --reload                                        #执行
firewall-cmd --zone=public --list-ports                    #查看打开端口
注:关闭防火墙更彻底,要打开端口则所有的远程访问端口都类似上面必须打开
打开2181、2888、3888端口
sh bin/zkServer.sh start                #启动ZK服务
sh bin/zkServer.sh stop                #停止ZK服务
sh bin/zkServer.sh restart            #重启ZK服务
启动、停止、重启服务
[root@localhost conf]# jps
5863 Jps
2416 QuorumPeerMain        #QuorumPeerMain是zookeeper进程,启动正常
检查服务
sh bin/zkServer.sh status                #查看ZK状态
查看结果:集群中只有一个leader,其他都是follower
[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zk/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: leader
[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zk/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: follower
常见错误:
Error contacting service. It is probably not running.
如果出现上面提示,请检查配置文件或者防火墙是否放行2181/2888/3888端口
[root@localhost bin]# ./zkServer.sh stop
[root@localhost bin]# ./zkServer.sh start-foreground    日志启动方式
注意,如果启动时拒绝访问,检查是否防火墙端口都打开,如果打开则都先启动,再看。某个节点没启动,当然访问是被拒绝。
查看集群状态
[root@localhost bin]# ./zkCli.sh -server hadoop01:2181
客户端访问

[zk: localhost:2181(CONNECTED) 1] ls /
[dubbo, zookeeper]
客户端查看服务

 

 

安装HDFS

cd /usr/local/src                                    #进入目录
mkdir hadoop                                        #创建目录
tar -xvf hadoop-2.7.1.tar.gz                         #上传文件
上传文件及安装
vi etc/hadoop/hadoop-env.sh
#JDK安装目录,虽然系统配置了JAVA_HOME,但有时无法正确识别,最后进行配置
export JAVA_HOME=/usr/local/src/java/jdk1.7.0_51/    
#指定hadoop的配置文件目录,不运行hadoop可以不指定
export HADOOP_CONF_DIR=/usr/local/src/hadoop/hadoop-2.7.1/etc/hadoop
编辑hadoop-env.sh
vi etc/hadoop/core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.163.129:9000</value>
    </property>

<!--注意:用来指定临时存放目录,否则默认的系统的临时目录当重启hadoop时会被删除,影响HDFS下的文件 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/src/hadoop/hadoop-2.7.1/tmp</value>
    </property>

<!--执行zookeeper地址-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
    </property>
</configuration>
编辑core-site.xml
vi etc/hadoop/hdfs-site.xml
<configuration>
    <property>
      <name>dfs.namenode.rpc-address</name>
      <value>hadoop01:9000</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
编辑hdfs-site.xml
vi etc/hadoop/hdfs-site.xml
<configuration>
    <property>
      <name>dfs.namenode.rpc-address</name>
      <value>hadoop01:9000</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
编辑mapred-site.xml
将mapred-site.xml.template复制一份并将名称修改为mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
编辑mapred-site.xml
<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop01</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
</configuration>
编辑yarn-site.xml
vi slaves
hadoop01        #将localhost改为hostname名
编辑slaves文件
配置hadoop的环境变量:
#set hadoop env
HADOOP_HOME=/usr/local/src/hadoop/hadoop-2.7.1/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source /etc/profile
在/etc/profile中进行配置
bin/hdfs namenode –format
格式化文件系统

看到上面的successfully格式化成功,文件在/tmp/hadoop-root/dfs/name下
注意:可能失败,jps检查不到namenode,再次格式化,如果还不行检查配置文件。

 

 

sbin/start-dfs.sh            
#停止服务stop-dfs.sh
启动HDFS服务

 

也可以执行sbin/start-all.sh启动hadoop,其中就包括hdfs。它会多启动两个服务:nodeManagerResourceManager。执行jps就应该显示6个服务,就代表启动成功。

  检查服务是否正常:

      1、可以通过浏览器直接访问:http://192.168.163.129:50070/

      2、如下图

      

 

1、可以用jps查看后台java进程,确保hdfs的进程都正常启动
由于重新格式化系统可能出现某些进程不能启动,解决方法是先停止服务,删除rm -fr /tmp/hadoop-root 下name,data等节点数据,重新启动服务
2、localhost: ssh: Could not resolve hostname localhost: Name or service not ……
在/etc/profile中进行配置
 #set hadoop env
HADOOP_HOME=/usr/local/src/hadoop/hadoop-2.7.1/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3、namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.
[root@hadoop01 hadoop-2.7.1]# vim etc/hadoop/hdfs-site.xml
<property>
  <name>dfs.namenode.rpc-address</name>
  <value>192.168.163.129:9000</value>
</property>
3、put: Cannot create file/test/letter.txt._COPYING_. Name node is in safe mode.
执行下面的命令
bin/hadoop dfsadmin -safemode leave
常见问题
http://192.168.163.129:50070/
执行命令很慢,执行时稍等片刻
bin/hdfs dfs -mkdir /user                        #创建user目录
bin/hdfs dfs -put /root/install.log /use    r    #上传文件
bin/hdfs dfs –ls /                                #查看根目录
bin/hdfs dfs -ls /user                        #列目录
创建新的文件夹,添加文件

      

http://192.168.163.129:50070/
注意:端口50070或者要关闭防火墙
检查,可以直接通过浏览器浏览

 

posted @ 2018-04-01 20:54  项羽齐  阅读(298)  评论(0编辑  收藏  举报