zoukankan      html  css  js  c++  java
  • 从零开始搭建大数据平台

    1.首先配置虚拟机,
    在node-1上,固定IP,设置好防火墙,然后克隆出节点2和3,修改一下IP和节点hostname。

    [root@localhost network-scripts]# vim ifcfg-eth0
    DEVICE=eth0
    #HWADDR=00:0C:29:57:1E:97(注释掉)
    TYPE=Ethernet
    #UUID=b3b4e88b-6f57-480b-90d5-13506b174a36(注释掉)
    ONBOOT=yes(这个要是yes)
    NM_CONTROLLED=yes
    BOOTPROTO=static
    IPADDR=192.168.23.98
    NETMASK=255.255.255.0
    GATEWAY=192.168.23.1

    可以按照上述配置文件来,就可以固定IP和修改节点的IP地址。(靠谱的修改方式)

    1.1修改各个虚拟机主机名
    vi /etc/sysconfig/network

    NETWORKING=yes
    HOSTNAME=node-1
    (配置完上述这些就可以用 CRT连接了)
    1.2修改主机名和IP的映射关系
    vi /etc/hosts
    (进去把原本的删除)
    192.168.1.101 node-1
    192.168.1.102 node-2
    192.168.1.103 node-3
    1.3配置ssh免密登陆
    #生成ssh免登陆密钥

    ssh-keygen -t rsa (四个回车)
    执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
    将公钥拷贝到要免密登陆的目标机器上
    ssh-copy-id node-1
    ssh-copy-id node-2
    ssh-copy-id node-3

    1.4同步集群时间
    1.5 同步集群时间
    常用的手动进行时间的同步
    date -s "2017-03-03 03:03:03"
    或者网络同步:
    yum install ntpdate
    ntpdate ntp1.aliyun.com


    【安装rz yum install lrzsz】


    2.安装JDK

    先创建出/export/servers 目录


    2.1上传jdk
    rz jdk-8u65-linux-x64.tar.gz

    2.2解压jdk
    tar -zxvf jdk-8u65-linux-x64.tar.gz -C /root/apps

    2.3将java添加到环境变量中
    vim /etc/profile
    #在文件最后添加
    export JAVA_HOME=/root/apps/jdk1.8.0_65
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar


    复制jdk、profile到2,3节点

    scp -r jdk root@node-3:/root/export/servers/
    scp /etc/profile root@node-3:/etc/

    #刷新配置
    source /etc/profile

    3安装hadoop2.7.4
    上传hadoop的安装包到服务器
    hadoop-2.7.4-with-centos-6.7.tar.gz
    解压安装包
    tar zxvf hadoop-2.7.4-with-centos-6.7.tar.gz

    注意:hadoop2.x的配置文件目录:$HADOOP_HOME/etc/hadoop


    第一个:hadoop-env.sh
    vi hadoop-env.sh
    export JAVA_HOME=/root/apps/jdk1.8.0_65


    第二个:core-site.xml
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://node-1:9000</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/root/export/servers/hadoop</value>
    </property>


    第三个:hdfs-site.xml
    <!-- 指定HDFS副本的数量 -->
    <property>
    <name>dfs.replication</name>
    <value>2</value>
    </property>
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>node-1:50090</value>
    </property>

    第四个:mapred-site.xml

    mv mapred-site.xml.template mapred-site.xml
    vi mapred-site.xml

    <!-- 指定mr运行时框架,这里指定在yarn上,默认是local -->
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>


    第五个:yarn-site.xml
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node-1</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>


    第六个:slaves文件,里面写上从节点所在的主机名字
    vi slaves
    node-1
    node-2
    node-3

    将hadoop添加到环境变量

    vim /etc/proflie
    export JAVA_HOME=/root/apps/jdk1.8.0_65
    export HADOOP_HOME=/root/apps/hadoop-2.7.4
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    source /etc/profile

    这时候复制hadoop到2,3了。
    scp -r hadoop root@node-2:/root/export/servers
    scp -r hadoop root@node-3:/root/export/servers


    3.3格式化namenode(本质是对namenode进行初始化)
    hdfs namenode format (hadoop namenode -format)

    3.4启动hadoop
    先启动HDFS
    sbin/start-dfs.sh (一定要用这种方式启动,不然有时候namenode启动不了,不要进入sbin文件夹启动)

    再启动YARN
    sbin/start-yarn.sh

    3.5验证是否启动成功
    使用jps命令验证
    27408 NameNode
    28218 Jps
    27643 SecondaryNameNode (secondarynamenode)
    28066 NodeManager
    27803 ResourceManager
    27512 DataNode

    http://192.168.1.101:50070 (HDFS管理界面)
    http://192.168.1.101:8088 (MR管理界面)

    【这里登陆node-1:50070 和 node-1:8088 成功的话,hadoop就是安装完成了】


    -----------------------------------------------------------------------------

    Flume安装:
    Flume 的安装非常简单
    上传安装包到数据源所在节点上
    然后解压 tar -zxvf apache-flume-1.6.0-bin.tar.gz
    然后进入 flume 的目录,修改 conf 下的 flume-env.sh,在里面配置 JAVA_HOME
    export JAVA_HOME=/root/export/servers/jdk

    -----------------------------------------------------------------------------

    Hive 数据仓库安装部署:
    1.上传tar包

    2.解压
    tar -zxvf hive-1.2.1.tar.gz
    3.安装mysql数据库
    推荐yum 在线安装:
    yum安装mysql
    yum install mysql mysql-server mysql-devel

    完成后,用 /etc/init.d/mysqld start 启动mysql

    启动mysql控制台:
    mysql
    mysql>; USE mysql;
    mysql>; UPDATE user SET Password=PASSWORD('hadoop') WHERE user='root';
    mysql>; FLUSH PRIVILEGES;
    允许远程登录
    mysql -u root -p
    输入密码:hadoop 就可以登陆mysql了。
    Enter Password: <your new password>
    mysql>GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
    完成后就能远程管理mysql了。

    mysql服务名字 service mysqld start

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'hadoop' WITH GRANT OPTION;

    UPDATE user SET Password=PASSWORD('hadoop') WHERE user='root';

    4.配置hive:
    vi hive-site.xml
    添加如下内容:
    <configuration>
    <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    <description>username to use against metastore database</description>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hadoop</value>
    <description>password to use against metastore database</description>
    </property>
    </configuration>

    5.安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下
    如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
    mysql -uroot -p
    #(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址或主机都可以连接)
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
    FLUSH PRIVILEGES;

    6. Jline包版本不一致的问题,需要拷贝hive的lib目录中jline.2.12.jar的jar包替换掉hadoop中的
    /home/hadoop/app/hadoop-2.6.4/share/hadoop/yarn/lib/jline-0.9.94.jar


    启动hive
    bin/hive

    Hive几种使用方式:
    1.Hive交互shell bin/hive

    2.Hive JDBC服务(参考java jdbc连接mysql)

    3.hive启动为一个服务器,来对外提供服务
    bin/hiveserver2
    nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &

    启动成功后,可以在别的节点上用beeline去连接
    bin/beeline -u jdbc:hive2://mini1:10000 -n root

    或者
    bin/beeline
    ! connect jdbc:hive2://mini1:10000

    4.Hive命令
    hive -e ‘sql’
    bin/hive -e 'select * from t_test'

    -----------------------------------------------------------------------------
    Zookeeper集群搭建:
    安装前需要安装好jdk

    ##
    检测集群时间是否同步
    检测防火墙是否关闭
    检测主机 ip映射有没有配置


    ##下载安装包、解压

    tar -zxvf zookeeper-3.4.5.tar.gz
    mv zookeeper-3.4.5 zookeeper

    ##修改环境变量(注意:3台zookeeper都需要修改)

    vi /etc/profile
    export ZOOKEEPER_HOME=/home/hadoop/zookeeper
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
    source /etc/profile

    ##修改Zookeeper配置文件

    cd zookeeper/conf
    cp zoo_sample.cfg zoo.cfg
    vi zoo.cfg
    添加内容:
    dataDir=/root/export/servers/zookeeper/zkdata
    server.1=node-1:2888:3888 ## (心跳端口、选举端口)
    server.2=node-2:2888:3888
    server.3=node-3:2888:3888
    创建文件夹:
    cd /home/hadoop/zookeeper/
    mkdir zkdata
    在data文件夹下新建myid文件,myid的文件内容为:
    cd zkdata
    echo 1 > myid

    ##分发安装包到其他机器
    scp -r /root/apps root@mini2:/root/
    scp -r /root/apps root@mini3:/root/

    ##修改其他机器的配置文件
    修改myid文件
    到mini2上:修改myid为:2
    到mini3上:修改myid为:3

    ##启动(每台机器)
    zkServer.sh start
    或者编写一个脚本来批量启动所有机器:
    for host in "mini1 mini2 mini3"
    do
    ssh $host "source/etc/profile;/root/apps/zookeeper/bin/zkServer.sh start"
    done

    ##查看集群状态
    jps(查看进程)
    zkServer.sh status(查看集群状态,主从信息)

    如果启动不成功,可以观察zookeeper.out日志,查看错误信息进行排查


    配置文件中参数说明:

    tickTime这个时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是说每个tickTime时间就会发送一个心跳。

    initLimit这个配置项是用来配置zookeeper接受客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,而是zookeeper服务器集群中连接到leader的follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。

    当已经超过10个心跳的时间(也就是tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20秒。

    syncLimit这个配置项标识leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。

    dataDir顾名思义就是zookeeper保存数据的目录,默认情况下zookeeper将写数据的日志文件也保存在这个目录里;

    clientPort这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求;

    server.A=B:C:D中的A是一个数字,表示这个是第几号服务器,B是这个服务器的IP地址,C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,D是在leader挂掉时专门用来进行选举leader所用的端口。

    -----------------------------------------------------------------------------
    HADOOP HA的部署

    -----------------------------------------------------------------------------
    【接下来就是spark部分的】
    -----------------------------------------------------------------------------
    Spark部署安装:
    三、 Spark集群安装
    3.1 下载spark安装包
    下载地址spark官网:http://spark.apache.org/downloads.html
    这里我们使用 spark-2.0.2-bin-hadoop2.7版本.

    3.2 规划安装目录
    /opt/bigdata
    3.3 解压安装包
    tar -zxvf spark-2.0.2-bin-hadoop2.7.tgz
    3.4 重命名目录
    mv spark-2.0.2-bin-hadoop2.7 spark
    3.5 修改配置文件

    配置文件目录在 /opt/bigdata/spark/conf
     vi spark-env.sh 修改文件(先把spark-env.sh.template重命名为spark-env.sh)


    #配置java环境变量
    export JAVA_HOME=/opt/bigdata/jdk1.7.0_67
    #指定spark老大Master的IP
    export SPARK_MASTER_HOST=node-1
    #指定spark老大Master的端口
    export SPARK_MASTER_PORT=7077
     vi slaves 修改文件(先把slaves.template重命名为slaves)
    node-2
    node-3
    3.6 拷贝配置到其他主机
    通过scp 命令将spark的安装目录拷贝到其他机器上
    scp -r /opt/bigdata/spark hdp-node-02:/opt/bigdata
    scp -r /opt/bigdata/spark hdp-node-03:/opt/bigdata

    3.7 配置spark环境变量
    将spark添加到环境变量,添加以下内容到 /etc/profile
    export SPARK_HOME=/opt/bigdata/spark
    export PATH=$PATH:$SPARK_HOME/bin
    注意最后 source /etc/profile 刷新配置
    3.7 启动spark
    #在主节点上启动spark
    /opt/bigdata/spark/sbin/start-all.sh
    -----------------------------------------------------------------------------
    kafka:
    首先保证集群的时间同步。
    集群启动zookeeper。
    6.2 三台机器安装kafka集群
    6.2.1 下载kafka安装压缩包
    http://archive.apache.org/dist/kafka/

    6.2.2 上传压缩包并解压
    这里统一使用 kafka_2.11-1.0.0.tgz 这个版本
    6.2.3 修改kafka配置文件
    第一台机器修改kafka配置文件server.properties
    broker.id=0
    num.network.threads=3
    num.io.threads=8
    socket.send.buffer.bytes=102400
    socket.receive.buffer.bytes=102400
    socket.request.max.bytes=104857600
    log.dirs=/export/servers/kafka/kafka-logs
    num.partitions=2
    num.recovery.threads.per.data.dir=1
    offsets.topic.replication.factor=1
    transaction.state.log.replication.factor=1
    transaction.state.log.min.isr=1
    log.flush.interval.messages=10000
    log.flush.interval.ms=1000
    log.retention.hours=168
    log.segment.bytes=1073741824
    log.retention.check.interval.ms=300000
    zookeeper.connect=node1:2181,node2:2181,node3:2181
    zookeeper.connection.timeout.ms=6000
    group.initial.rebalance.delay.ms=0
    delete.topic.enable=true
    host.name=node1

    第二台机器修改kafka配置文件server.properties
    broker.id=1
    num.network.threads=3
    num.io.threads=8
    socket.send.buffer.bytes=102400
    socket.receive.buffer.bytes=102400
    socket.request.max.bytes=104857600
    log.dirs=/export/servers/kafka/kafka-logs

    num.partitions=2
    num.recovery.threads.per.data.dir=1
    offsets.topic.replication.factor=1
    transaction.state.log.replication.factor=1
    transaction.state.log.min.isr=1
    log.flush.interval.messages=10000
    log.flush.interval.ms=1000
    log.retention.hours=168
    log.segment.bytes=1073741824
    log.retention.check.interval.ms=300000
    zookeeper.connect=node1:2181,node2:2181,node3:2181
    zookeeper.connection.timeout.ms=6000
    group.initial.rebalance.delay.ms=0
    delete.topic.enable=true
    host.name=node2

    第三台机器修改kafka配置文件server.properties
    broker.id=2
    num.network.threads=3
    num.io.threads=8
    socket.send.buffer.bytes=102400
    socket.receive.buffer.bytes=102400
    socket.request.max.bytes=104857600
    log.dirs=/export/servers/kafka/kafka-logs
    num.partitions=2
    num.recovery.threads.per.data.dir=1
    offsets.topic.replication.factor=1
    transaction.state.log.replication.factor=1
    transaction.state.log.min.isr=1
    log.flush.interval.messages=10000
    log.flush.interval.ms=1000
    log.retention.hours=168
    log.segment.bytes=1073741824
    log.retention.check.interval.ms=300000
    zookeeper.connect=node1:2181,node2:2181,node3:2181
    zookeeper.connection.timeout.ms=6000
    group.initial.rebalance.delay.ms=0
    delete.topic.enable=true
    host.name=node3

    6.2.4 启动kafka集群
    三台机器启动kafka服务
    ./kafka-server-start.sh ../config/server.properties
    nohup bin/kafka-server-start.sh config/server.properties > /dev/null 2>&1 & 后台启动命令
    -----------------------------------------------------------------------------
    flume与kafka的整合:

    实现flume监控某个目录下面的所有文件,然后将文件收集发送到kafka消息系统中
    第一步:flume下载地址
    http://archive.apache.org/dist/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz

    第二步:上传解压flume

    第三步:配置flume.conf
    #为我们的source channel sink起名
    a1.sources = r1
    a1.channels = c1
    a1.sinks = k1
    #指定我们的source收集到的数据发送到哪个管道
    a1.sources.r1.channels = c1
    #指定我们的source数据收集策略
    a1.sources.r1.type = spooldir
    a1.sources.r1.spoolDir = /export/servers/flumedata
    a1.sources.r1.deletePolicy = never
    a1.sources.r1.fileSuffix = .COMPLETED
    a1.sources.r1.ignorePattern = ^(.)*\.tmp$
    a1.sources.r1.inputCharset = GBK
    #指定我们的channel为memory,即表示所有的数据都装进memory当中
    a1.channels.c1.type = memory
    #指定我们的sink为kafka sink,并指定我们的sink从哪个channel当中读取数据
    a1.sinks.k1.channel = c1
    a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
    a1.sinks.k1.kafka.topic = test
    a1.sinks.k1.kafka.bootstrap.servers = node1:9092,node2:9092,node3:9092
    a1.sinks.k1.kafka.flumeBatchSize = 20
    a1.sinks.k1.kafka.producer.acks = 1

    启动flume
    bin/flume-ng agent --conf conf --conf-file conf/flume.conf --name a1 -Dflume.root.logger=INFO,console

    -----------------------------------------------------------------------------
    spark HA:

    -----------------------------------------------------------------------------
    spark on yarn:

    -----------------------------------------------------------------------------
    sparkStreaming结合flume操作流程
    1 flume push方式
    #首先启动spark-streaming应用程序
    #再bin/flume-ng agent -n a1 -c conf/ -f conf/flume-push-spark.conf -Dflume.root.logger=INFO,console

    生产数据命令: while true;do echo hadoop hadoop spark>>/root/test.txt;sleep 2;done

    2 flume poll方式
    #首先将下载好的spark-streaming-flume-sink_2.11-2.0.2.jar放入到flume的lib目录下
    #将scala-library-2.11.8.jar拷贝到flume的lib目录下,
    删除flume的lib下自带的scala-library-2.10.1.jar包
    #启动flume
    bin/flume-ng agent -n a1 -c conf/ -f conf/flume-poll-spark.conf -Dflume.root.logger=INFO,console
    #再启动spark-streaming应用程序
    -----------------------------------------------------------------------------
    sparkStreaming整合kafka
    #首先启动zk
    bin/kafka-server-start.sh config/server.properties
    #创建topic
    bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1 --partitions 2 --topic test
    #查看主题
    bin/kafka-topics.sh --list --zookeeper node1:2181
    #启动一个生产者发送消息
    bin/kafka-console-producer.sh --broker-list node1:9092 --topic test
    #启动spark-streaming应用程序
    -----------------------------------------------------------------------------
    Hbase安装部署:
    1.3 hbase集群搭建
    ----先部署一个zookeeper和hadoop集群
    (1)上传hbase安装包
    (2)解压
    (3)配置hbase集群,要修改4个文件
    注意:要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下

    (3.1)修改hbase-env.sh
    export JAVA_HOME=/export/servers/jdk
    //告诉hbase使用外部的zk
    export HBASE_MANAGES_ZK=false

    (3.2)修改 hbase-site.xml
    <configuration>
    <!-- 指定hbase在HDFS上存储的路径 -->
    <property>
    <name>hbase.rootdir</name>
    <value>hdfs://node1:9000/hbase</value>
    </property>
    <!-- 指定hbase是分布式的 -->
    <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    </property>
    <!-- 指定zk的地址,多个用“,”分割 -->
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>node1:2181,node2:2181,node3:2181</value>
    </property>
    </configuration>

    (3.3)修改 regionservers
    node2
    node3
    (3.4) 修改 backup-masters来指定备用的主节点
    [root@itcast01 conf]# vi backup-masters
    node2

    (3.5) 配置hbase环境变量
    vi /etc/profile
    export HBASE_HOME=/export/servers/hbase
    Export PATH=$PATH:$HBASE_HOME/bin

    (3.6) 拷贝hbase和环境变量到其他节点
    scp -r hbase node2:$PWD
    scp -r hbase node3:$PWD
    scp /etc/profile node2:/etc
    scp /etc/profile node3:/etc

    (3.7) 让所有节点hbase环境变量生效
    在所有节点上执行:source /etc/profile

    (4) 将配置好的HBase拷贝到每一个节点并同步时间。
    ntpdate -u cn.pool.ntp.org
    (5) 启动所有的hbase进程
    首先启动zk集群
    ./zkServer.sh start
    启动hdfs集群
    start-dfs.sh
    启动hbase,在主节点node1上运行:
    start-hbase.sh
    (6) 通过浏览器访问hbase管理页面
    node1:16010
    node2:16010
    (7) 为保证集群的可靠性,要启动多个HMaster
    hbase-daemon.sh start master

    注意:使用jdk8的时候,出现了Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0的红色标识。字面意思是MaxPermSize不需要我们配置了,所以我就按照它的方法把default VM arguments中MaxPermSize参数给删掉就不会出现上面的提示了。
    -----------------------------------------------------------------------------

  • 相关阅读:
    Palindrome
    Girls' research
    最长回文
    Water Tree
    Alternating Current
    Psychos in a Line
    Feel Good
    Color the Fence
    javaScript内置类Date,Math等
    DOM之兄弟节点
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/9399929.html
Copyright © 2011-2022 走看看