zoukankan      html  css  js  c++  java
  • Hadoop2.5.0 搭建实录

    目录:

      


    第一步:准备相关材料

    我是要在另一台新服务器上搭建ESXi,部署了5个虚拟机,用 vSphere Client 管理。(注:如果选择CD/DVD驱动器的时候,一直显示正在连接,则需要重启客户端)

    这里我选用的是Cloudera公司的CDH版本,问题少一些,并且可以配套下载,避免遇到各种兼容问题。下载地址

    • CentOS-7-x86_64-Minimal-1511 。这个版本功能一应俱全,却不到1G
    • OpenJDK 1.7
    • hadoop-2.5.0-cdh5.3.6
    • hbase-0.98.6-cdh5.3.6
    • hive-0.13.1-cdh5.3.6
    • zookeeper-3.4.5-cdh5.3.6
    • sqoop-1.4.5-cdh5.3.6
    • Xshell(方便敲命令)
    • SecureFXPortable(方便从本地上传文件到虚拟机)

     


     

    注:提前预览需要修改的相关文件

    系统配置

    1. /etc/hostname
    2. /etc/hosts
    3. /etc/sysconfig/network-scripts/ifcfg-eno16777984

    相关软件全放到/opt目录下,而且环境变量全在各自的安装目录配置文件中设定(也可以在~/.bashrc 中统一设置)

    环境变量

    1. hadoop
      1.   /opt/hadoop-xx/etc/hadoop/hadoop-env.sh
      2.   /opt/hadoop-xx/etc/hadoop/yarn-env.sh
      3.   /opt/hadoop-xx/etc/hadoop/mapred-env.sh
    2. hbase
      1.   /opt/hbase-xx/conf/hbase-env.sh
    3. hive
      1.   /opt/hive-xx/conf/hive-env.sh
    4. sqoop
      1.   /opt/sqoop-xx/conf/sqoop-env.sh

    配置文件

    1. hadoop
      1.   /opt/hadoop-xx/etc/hadoop/slaves
      2.   /opt/hadoop-xx/etc/hadoop/core-site.xml
      3.   /opt/hadoop-xx/etc/hadoop/hdfs-site.xml
      4.   /opt/hadoop-xx/etc/hadoop/mapred-site.xml
      5.   /opt/hadoop-xx/etc/hadoop/yarn-site.xml 
    2. hbase
      1.   /opt/hbase-xx/conf/hbase-site.xml
      2.   /opt/hbase-xx/conf/backup-masters
      3.   /opt/hbase-xx/conf/regionservers
    3. zookeeper
      1.   /opt/zookeeper-xx/conf/zoo.cfg
      2.   在指定的目录 dataDir下 创建文件myid
    4. hive
      1.   /opt/hive-xx/conf/hive-site.xml
    5. sqoop
      1.   /opt/sqoop-xx/bin/configure-sqoop

      


    第二步:虚拟机环境搭建

    1. 使用 vSphere Client 创建虚拟机并指定自己下载的CentOS文件,先不设置网络,启动。
    2. 用root用户登录,然后通过修改 /etc/sysconfig/network-scripts/ifcfg-enoxxxxxx 文件设置桥接模式网络,具体参照 CentOS7网卡设置为桥接模式静态IP配置方法详解
    3. 修改 /etc/hostname 
    4. 修改 /etc/hosts
      192.168.0.155 NameNode1
      192.168.0.156 NameNode2
      192.168.0.157 DataNode1
      192.168.0.158 DataNode2
      192.168.0.159 DataNode3
      127.0.0.1     localhost  #这个必须要有

    节点配置图 


    第三步:用户信息

    为了以后的模块化管理,打算hadoop,hbase,hive等等都单独建用户

    因为这5台机器创建用户,配置权限等的操作是一样的,我们要不就是在五个机器上都敲一遍命令,要不就是在一台机器上配完了再把文件复制过去,都比较繁琐。

    因为我用的是Xshell,使用 【Alt + t , k】或者【工具】->【发送键输入到所有会话】,这样只要在一个会话中输入命令,所有打开的会话都会执行,就像是同时在这5台机器上敲命令一样。

    su  #使用root用户
    useradd -m hadoop -s  /bin/bash  #用同样方式创建hbase,hive,zookeeper,sqoop用户
    passwd hadoop   #给用户设置密码
    visudo  #给用户设定权限  :98  在98行新加hadoop的权限即可
    

    接下来就是安装SSH、配置SSH无密码登陆

    首先更新一下系统软件

    yum upgrade

     

    设置本机公钥、私钥

    cd ~/.ssh/ # 若没有该目录,请先执行一次 mkdir ~/.ssh

    ssh-keygen -t rsa #一路回车

    cat id_rsa.pub >> authorized_keys # 将公钥加入服务器

    chmod 600 ./authorized_keys # 修改文件权限

    -----------------------------------如果是非root用户,下面这一步必须要做----------------------------------------------------

    chmod 700 ~/.ssh   #修改文件夹权限  mkdir生成的文件夹默认是775,必须改成700;用ssh localhost生成的文件夹也可以

    上面介绍的SSH免密登录本机的,而我们的登录关系是这样的 

    所以  还要分别赋予公钥

    1. 将NameNode1,NameNode2的公钥分别加入对方的授权文件
    2. 将NameNode1的公钥分别加入DataNode1,DataNode2,DataNode3的授权文件
    3. 将NameNode2的公钥分别加入DataNode1,DataNode2,DataNode3的授权文件
    4. 更改这5个.ssh的文件夹以及authorized_keys的权限

      


     

    第四步 安装、配置Java环境

    使用yum安装java(每一台虚拟机)

    sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
    

    默认安装路径: /usr/lib/jvm/java-1.7.0-openjdk 

    然后在 /etc/environment 中保存JAVA_HOME变量

    sudo vi /etc/environment
    

    内容如下

     


     

    第5步 Zookeeper安装配置

    1. 在一台机器解压安装zookeeper,并进入该安装目录
    2. 将conf/zoo_example.cfg 重命名为 zoo.cfg
      mv conf/zoo_example.cfg conf/zoo.cfg
    3. 编辑zoo.cfg内容
      tickTime=2000
      initLimit=10
      syncLimit=5
      dataDir=/home/hadoop/data/zookeeper
      dataLogDir=/home/hadoop/logs/zookeeper
      clientPort=2181
      server.0=NameNode1:2888:3888
      server.1=NameNode2:2888:3888
      server.2=DataNode1:2888:3888
      server.3=DataNode2:2888:3888
      server.4=DataNode3:2888:3888
    4. 通过scp 将安装包复制到其他机器
    5. 在每一个机器上的对应位置创建 dataDir和dataLogDir目录,并将zoo.cfg文件中 server. 后面对应的数字写入 dataDir下的myid文件。如 节点NameNode2就要这行一下命令
      echo 1 > /home/hadoop/data/zookeeper/myid
      #因为zoo.cfg文件中 NameNode2前面的数字是1 所以写入1即可
      #如果DataNode3的话就需要写4

       注:一定要创建这两个目录 否则报错【ERROR [main:QuorumPeerMain@86] - Invalid config, exiting abnormally

    6. 使用Zookeeper要注意各节点的时间一致性问题,需要做时间同步,这里暂且同步一次。最好参考这篇CentOS7 中使用NTP进行时间同步
      # sudo yum install ntpdate #如果没有安装ntpdate的话,需要先安装
      
      sudo ntpdate time.nist.gov
    7. 启动服务
      bin/zkServer.sh start
      

        

    8. 查看状态 (注意:/etc/hosts中必须要有 127.0.0.1 与 localhost的映射,否则zk之间无法连接
      bin/zkServer.sh status

    第6步 Hadoop安装、配置

    在/opt下面创建一个文件夹 software并更改用户组

    cd /opt
    sudo mkdir software
    sudo chown -R hadoop:hadoop software
    

      然后所有大数据相关程序都放到这个文件夹中

    1. 在~/.bashrc 中定义 SOFTWARE_HOME
      export SOFTWARE_HOME=/opt/software
      

        

    2. cd到Hadoop安装目录的配置目录 /etc/hadoop 编辑hadoop-env.sh,定义HADOOP_HOME,HADOOP_PID_DIR,HADOOP_LOG_DIR
      export HADOOP_HOME=/opt/hadoop/hadoop-2.5.0-cdh5.3.6
      export HADOOP_PID_DIR=$SOFTWARE_HOME/data/hadoop/pid
      export HADOOP_LOG_DIR=$SOFTWARE_HOME/logs/hadoop
      

        

    3. 编辑yarn-env.sh 定义YARN_PID_DIR,YARN_LOG_DIR
      export YARN_LOG_DIR=$SOFTWARE_HOME/logs/yarn
      export YARN_PID_DIR=$SOFTWARE_HOME/data/yarn
      

        

    4. 编辑 mapred-env.sh,定义PID和Log目录
      export HADOOP_MAPRED_LOG_DIR=$SOFTWARE_HOME/logs/mapred
      export HADOOP_MAPRED_PID_DIR=$SOFTWARE_HOME/data/mapred
      

        

    5. 编辑core-site.xml  这里 命名空间的逻辑名称使用 sardoop
      <configuration>
          <property>
              <name>fs.defaultFS</name>
              <value>hdfs://sardoop</value>
          </property>
      
          <property>
              <name>hadoop.http.staticuser.user</name>
              <value>hadoop</value>
          </property>
          <property>
              <name>hadoop.proxyuser.hadoop.hosts</name>
              <value>*</value>
          </property>
          <property>
              <name>hadoop.proxyuser.hadoop.users</name>
              <value>hadoop</value>
          </property> 
          <property>
              <name>fs.trash.interval</name>
              <value>4230</value>
          </property>
          <property>
              <name>io.file.buffer.size</name>
              <value>65536</value>
          </property>
      
          <property>
              <name>hadoop.tmp.dir</name>
              <value>/opt/software/hadoop-2.5.0-cdh5.3.6/tmp</value>
          </property>
      
          <property>
                <name>ha.zookeeper.quorum</name>
                <value>NameNode1,NameNode2,DataNode1,DataNode2,DataNode3</value>
          </property>
      
      </configuration>
    6. 编辑hdfs-site.xml。这里对NameNode使用HA,NameNode ID使用 nn1,nn2 分别对应 NameNode1,NameNode2,使用三个DataNode做JournalNode。
      <configuration>
          <property>
              <name>dfs.replication</name>
              <value>2</value>
          </property>
          <property>
              <name>dfs.nameservices</name>
              <value>sardoop</value>
          </property>
          <property>
              <name>dfs.ha.namenodes.sardoop</name>
              <value>nn1,nn2</value>
          </property>
          <property>
              <name>dfs.namenode.rpc-address.sardoop.nn1</name>
              <value>NameNode1:9820</value>
          </property>
          <property>
              <name>dfs.namenode.rpc-address.sardoop.nn2</name>
              <value>NameNode2:9820</value>
          </property>
          <property>
              <name>dfs.namenode.http-address.sardoop.nn1</name>
              <value>NameNode1:9870</value>
          </property>
          <property>
              <name>dfs.namenode.http-address.sardoop.nn2</name>
              <value>NameNode2:9870</value>
          </property>
          <property>
              <name>dfs.namenode.shared.edits.dir</name>
              <value>
              qjournal://DataNode1:8485;DataNode2:8485;DataNode3:8485/sardoop</value>
          </property>
          <property>
              <name>dfs.client.failover.proxy.provider.sardoop</name>
              <value>
              org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
          </property>
          <property>
              <name>dfs.ha.fencing.methods</name>
              <value>sshfence</value>
          </property>
          <property>
              <name>dfs.ha.fencing.ssh.private-key-files</name>        
              <value>/home/hadoop/.ssh/id_rsa</value>        
          </property>
          <property>        
              <name>dfs.journalnode.edits.dir</name>        
              <value>/opt/software/hadoop-2.5.0-cdh5.3.6/tmp/journal</value>        
          </property>
          <property>
              <name>dfs.ha.automatic-failover.enabled</name>
              <value>true</value>
          </property>
          <property>
              <name>dfs.datanode.max.transfer.threads</name>
              <value>4096</value>
          </property>

      <!--这里必须要加上前缀 file:// 否则会出现警告 should be specified as a URI in configuration files.并无法启动DataNode--> <property> <name>dfs.namenode.name.dir</name> <value>file:///opt/hdfsdata/namenode,file:///home/hadoop/data/hdfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///opt/hdfsdata/datanode,file:///home/hadoop/data/hdfs/datanode</value> </property> </configuration>
    7. 编辑slaves文件
      DataNode1
      DataNode2
      DataNode3
    8. 接下来就是启动及初始化JournalNode、NameNode、DataNode,可对应这篇文章 Hadoop HA.
    9. 配置yarn-site.xml,使用HA
      <configuration>
        <property>
          <name>yarn.resourcemanager.ha.enabled</name>
          <value>true</value>
        </property>
        <property>
          <name>yarn.resourcemanager.ha.rm-ids</name>
          <value>rm1,rm2</value>
        </property>
        <property>
          <name>yarn.resourcemanager.hostname.rm1</name>
          <value>NameNode1</value>
        </property>
        <property>
          <name>yarn.resourcemanager.hostname.rm2</name>
          <value>NameNode2</value>
        </property>
        <property>
          <name>yarn.resourcemanager.recovery.enabled</name>
          <value>true</value>
        </property>
        <property>
          <name>yarn.resourcemanager.cluster-id</name>
          <value>yarnha</value>
        </property>
        <property>
          <name>yarn.resourcemanager.store.class</name>
          <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
        </property>
        <property>
          <name>yarn.resourcemanager.zk-address</name>
          <value>NameNode1,NameNode2,DataNode1,DataNode2,DataNode3</value>
        </property>
        
        <property>
          <name>yarn.web-proxy.address</name>
          <value>NameNode2:9180</value>
        </property>
        <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
        </property>
        <property>
          <name>yarn.nodemanager.vmem-check-enabled</name>
          <value>false</value>
        </property>
        <property>
          <name>yarn.nodemanager.vmem-pmem-ratio</name>
          <value>4</value>
        </property>
      
      </configuration>
    10. 配置mapred-site.xml
      <configuration>
      
              <property>
                      <name>mapreduce.framework.name</name>
                      <value>yarn</value>
              </property>
              <property>
                      <name>mapreduce.jobhistory.address</name>
                      <value>NameNode1:10020</value>
              </property>
              <property>
                      <name>mapreduce.jobhistory.webapp.address</name>
                      <value>NameNode1:19888</value>
              </property>
      </configuration>
    11. 退出Hadoop安全模式
      bin/hdfs dfsadmin -safemode leave

       检查HDFS

    12. bin/hdfs fsck / -files -blocks
      
      

    第七步:HBase安装部署

    1. 安装并进入安装目录
    2. 编辑 conf/backup-masters
      NameNode2
    3. 编辑 conf/hbase-env.sh
      #主要修改这三项
      export HBASE_PID_DIR=${HOME}/data/hbase
      export HBASE_MANAGES_ZK=false
      export HBASE_LOG_DIR=${HOME}/logs/hbase
    4. 编辑 conf/hbase-site.xml
      <configuration>
          <property>
              <name>hbase.cluster.distributed</name>
              <value>true</value>
          </property>
          <property>
              <name>hbase.rootdir</name>
              <!--这里应该是要使用nameservice的,但是用了之后IP解析不正确,只能暂时换成HostName;还要注意一点 这里的必须使用当前处于Active的NameNode-->
              <!--HBase如果要做HA,这里以后必须要改成Nameservice,否则NameNode发生变化的时候还要手动修改Hbase配置-->
              <value>hdfs://NameNode1:9820/hbase</value>
              <!--<value>hdfs://sardoop/hbase</value>-->
          </property>
          <property>
              <name>hbase.zookeeper.quorum</name>
              <value>NameNode1,NameNode2,DataNode1,DataNode2,DataNode3</value>
          </property>
          <property>
              <name>hbase.zookeeper.property.dataDir</name>
              <value>/home/hadoop/data/zookeeper</value>
          </property>
      </configuration>
    5. 编辑 conf/regionservers
      NameNode2
      DataNode1
      DataNode2
      DataNode3

    注意:有时候启动HBase的时候会出现【org.apache.Hadoop.hbase.TableExistsException: hbase:namespace

    或者什么【Znode already exists】相关的问题,一般都是因为之前的HBase信息已经在Zookeeper目录下已经存在引起的。

    解决方法: 

    1. 登录到zookeeper节点的机器上
    2. cd ${ZOOKEEPER_HOME}/bin
    3. bin/zkCli.sh
    4. ls /  可以查看到zookeeper上已有hbase目录
    5. rmr /hbase  #删除该目录
    6. 最后重新启动hbase即可

    有时候用java调用hbase时,会发生访问hbase时虽然没有报错,但是一直没有响应。

    解决方式:

    在程序调用的机器中的hosts文件,添加hbase所在节点的hosts信息 


    第八步:Sqoop安装部署(Sqoop1)

    通过sqoop我们可以实现RDMS与hadoop生态产品 如hdfs、hive、hbase(单向)的数据导入导出。

    在导入的过程中 我们可以指定mapper的数量,甚至是压缩的方式。目前有sqoop1和sqoop2两个大版本,且差异较大。Sqoop1与Sqoop2的相关功能支持程度 

    1. 下载,解压,cd到安装目录
    2. 将 conf/sqoop-env-template.sh 重命名为 conf/sqoop-env.sh
    3. 编辑 conf/sqoop-env.sh
      #Set path to where bin/hadoop is available
      export HADOOP_COMMON_HOME=/opt/software/hadoop-2.5.0-cdh5.3.6
      
      #Set path to where hadoop-*-core.jar is available
      export HADOOP_MAPRED_HOME=/opt/software/hadoop-2.5.0-cdh5.3.6
      
      #set the path to where bin/hbase is available
      export HBASE_HOME=/opt/software/hbase-0.98.6-cdh5.3.6
      
      #Set the path to where bin/hive is available
      export HIVE_HOME=/opt/software/hive-0.13.1-cdh5.3.6
      
      #Set the path for where zookeper config dir is  (如果有独立的ZooKeeper集群,才需要配置这个)
      export ZOOCFGDIR=/opt/software/zookeeper-3.4.5-cdh5.3.6/
    4. 编辑 bin/configure-sqoop,注释掉HCAT_HOME、ACCUMULO_HOME(如果没有用到这些Hadoop组件的话),差不多在文件的中间位置,130行左右 
       

    5. 把mysql jdbc和sqlserver jdbc都放到 lib 下,同时拷贝到所有虚拟机的hadoop安装目录 $HADOOP_HOME/share/hadoop/common/lib。可使用下面的脚本
      cp mysql-connector-java-5.1.40-bin.jar /opt/software/sqoop-1.4.5-cdh5.3.6/lib/
      
      --复制到所有虚拟机的Hadoop目录
      cp mysql-connector-java-5.1.40-bin.jar /opt/software/hadoop-2.5.0-cdh5.3.6/share/hadoop/common/lib/
      scp mysql-connector-java-5.1.40-bin.jar hadoop@NameNode2:/opt/software/hadoop-2.5.0-cdh5.3.6/share/hadoop/common/lib/
      scp mysql-connector-java-5.1.40-bin.jar hadoop@DataNode1:/opt/software/hadoop-2.5.0-cdh5.3.6/share/hadoop/common/lib/
      scp mysql-connector-java-5.1.40-bin.jar hadoop@DataNode2:/opt/software/hadoop-2.5.0-cdh5.3.6/share/hadoop/common/lib/
      scp mysql-connector-java-5.1.40-bin.jar hadoop@DataNode3:/opt/software/hadoop-2.5.0-cdh5.3.6/share/hadoop/common/lib/
      
      cp sqljdbc4.jar /opt/software/sqoop-1.4.5-cdh5.3.6/lib/
      cp sqljdbc4.jar /opt/software/hadoop-2.5.0-cdh5.3.6/share/hadoop/common/lib/
      scp sqljdbc4.jar hadoop@NameNode2:/opt/software/hadoop-2.5.0-cdh5.3.6/share/hadoop/common/lib/
      scp sqljdbc4.jar hadoop@DataNode1:/opt/software/hadoop-2.5.0-cdh5.3.6/share/hadoop/common/lib/
      scp sqljdbc4.jar hadoop@DataNode2:/opt/software/hadoop-2.5.0-cdh5.3.6/share/hadoop/common/lib/
      scp sqljdbc4.jar hadoop@DataNode3:/opt/software/hadoop-2.5.0-cdh5.3.6/share/hadoop/common/lib/
      jdbc copy
    6. 检测安装状况,如下图所示,则安装配置都没问题了
      bin/sqoop help

       

    7. 使用   注:MSSqlServer与MySql的区别只在于连接信息上
      ** 查看sqlserver数据库列表
      bin/sqoop list-databases --connect 'jdbc:sqlserver://192.168.0.154:1433;username=sa;password=123'

      ** 查看数据库表
      bin/sqoop list-tables --connect 'jdbc:mysql://192.168.0.154:3306/Test' --username sa --password 123

      ** 直接导表数据到HBase
      bin/sqoop import --connect 'jdbc:sqlserver://192.168.0.154:1433;username=sa;password=123;database=Test' --table Cities --split-by Id
        --hbase-table sqoop_Cities --column-family c --hbase-create-table --hbase-row-key Id

      **用sql语句导入(如果使用了query的形式,则必须要在sql后面加上 $CONDITIONS)
      bin/sqoop import --connect 'jdbc:sqlserver://192.168.0.154:1433;username=sa;password=123;database=Test'
        --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE id>10 AND $CONDITIONS' -m 1
        --split-by Id --hbase-table sqoop_Cities --column-family c --hbase-create-table --hbase-row-key Id

      ** 导入HDFS(因为这是通过Mapper处理的,所有这个目标路径必须不存在)
      ./sqoop import --connect 'jdbc:sqlserver://192.168.0.154:1433;username=sa;password=123;database=Test' --table Cities --target-dir /input/Cities

      ** 从hdfs到处到mysql
      bin/sqoop export --connect jdbc:mysql://NameNode1:3306/test --username root --password 123
        --table loghour --m 2 --export-dir /tmp/loghour/ --input-fields-terminated-by ' '

    注:

    • sqoop2 不支持从sqlserver导入数据,且sqoop1与sqoop2在配置和使用上有很大区别
    • Sqoop1是无法从hbase/hive导出到mysql的,实现方式也都是通过hive将数据输出到文件 然后再用sqoop导出到mysql
    • Sqoop2从1.99.6开始通过KiteConnector的方式在一定程度上支持了HBase的读写-->文章传送门
    • Sqoop2 搭建及使用

    第九步:Hive安装部署

    1. 安装MySql
    2. 在mysql命令行设置hive对应的数据库,用户及密码  hive,123,并设置权限;
      create database hive;
      grant all on hive*.* to hive@'%'  identified by 'hive';
      flush privileges;
    3. cd到hive安装目录
      #为了操作方便,可以选择创建软链接(非必须)
      ln -s hive-0.13.1-cdh5.3.6 hive
    4. 将conf下面的模板文件改名成正式文件
      hive-default.xml.template --> hive-site.xml
      hive-log4j.properties.template --> hive-log4j.properties
      hive-exec-log4j.properties.template --> hive-exec-log4j.properties
      hive-env.sh.template --> hive-env.sh
    5. 修改 conf/hive-env.sh,主要是设置 HADOOP_HOME
      # Set HADOOP_HOME to point to a specific hadoop install directory
      HADOOP_HOME=/opt/software/hadoop-2.5.0-cdh5.3.6/
      
      # Hive Configuration Directory can be controlled by:
      export HIVE_CONF_DIR=/opt/software/hive-0.13.1-cdh5.3.6/conf/
      
      # Folder containing extra ibraries required for hive compilation/execution can be controlled by:
      export HIVE_AUX_JARS_PATH=/opt/software/hive-0.13.1-cdh5.3.6/lib/
    6. 修改 conf/hive-site.xml。这个版本的文件有一个错误的地方,在2784行少了一个起始标签 <property>。下面修改的配置是设定了元数据的存储方式,如果不做修改的话就会使用自带的derby作为数据库
      <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://NameNode1: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>hive</value>
        <description>username to use against metastore database</description>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123</value>
        <description>password to use against metastore database</description>
      </property>
      <!--用于远程连接-->
      <property>
        <name>hive.metastore.uris</name>
        <value>thrift://127.0.0.1:9083</value>
      </property>
      <!--这个参数用于启动hiveserver2,默认值存在bug 后续版本已修复-->
      <property>
         <name>hive.server2.long.polling.timeout</name>
         <value>5000ms</value>
         <description>Time in milliseconds that HiveServer2 will wait, before responding to asynchronous calls that use long polling</description>
      </property>
      <!--hive需要用到的包--> <property>   <name>hive.aux.jars.path</name>   <value>file:///opt/software/hive/lib/hive-hbase-handler-0.13.1-cdh5.3.6.jar,file:///opt/software/hive/lib/zookeeper-3.4.5-cdh5.3.6.jar,file:///opt/software/hive/lib/hbase-client-0.98.6-cdh5.3.6.jar</value> </property>
    7. 在hdfs上面,创建目录
      $HADOOP_HOME/bin/hadoop fs -mkdir /tmp
      $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse
      $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
      $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse
    8. 启动metastore服务
      bin/hive --service metastore &  #后面的&是用来让hive服务在后台运行,没有&的话 关掉服务所在的ssh连接时,服务也会stop
      #启动成功后,敲任意键回到shell命令输入模式,然后输入exit退出即可(通过命令而不是直接关闭客户端)

      # bin/hive --service hiveserver & #这个命令启动的服务用于java的api调用。如果没有这个需求则不需要执行该命令
    9. 启动成功后,会多一个RunJar进程,现在就可以使用Hive Cli了
    10. 如果想启用远程模式的话需要启动hive metastore服务。有个前提条件是 jps显示的进程中不能有RunJar,有的话Kill掉。否则会出现【Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083

    其他:

    ①hive命令的调用有3种方式:

    1. 多语句执行
      ./hive –f  ./hive-script.sql
    2. 单行语句
      ./hive -e  'select * from table'
    3. 交互模式  执行./hive 即可

    ②UDF的创建

    1. 首先要自定义UDF类
      package com.sarnath.jobtask.hive.udf;
      
      import org.apache.hadoop.hive.ql.exec.Description;
      import org.apache.hadoop.hive.ql.exec.UDF;;
      
      /**
       * 将时间字符串转换成所在的5分钟区间
       *
       * @author Zhanglei 2016年12月2日
       */
      @Description(name = "get5minTimeZone", value = "FUNC<time> - cast string to 5min timezone?")
      public class get5minTimeZone extends UDF {    
          public long evaluate(long time) {
              long minTotal = time/60;//总分钟数
              long timeValue = minTotal*60;// 时间值
              /*
               * 精确到秒的时间  + 5秒 - 秒位数值与5的余数
               */
              return timeValue + 5 * 60 - timeValue % (5 * 60);
          }
      }
    2. 将项目打包并放到HDFS上某路径下 如 /user/hadoop/hiveUDF/udftest.jar
    3. 在hive中执行创建命令
      #如果已存在 要先删除
      #drop function get5minTimeZone;
      
      create function get5minTimeZone as 'com.sarnath.jobtask.hive.udf.logTimeConvert' using jar 'hdfs:///user/hadoop/hiveUDF/jobtask.jar';

     ③相关command

    • 创建表 后面的棕色文字是指定从文件load数据的时候的字段间的分隔符
      create table logdetail(proxyip string,origin string)  row format delimited fields terminated by ';';
    • 分区  hive的分区可对大量数据的操作提升很大效率,一个分区就是一个文件夹
      • 创建分区
        create table logdetail(proxyip string ,origin string) partitioned by(logdate string);
      • 展示表的所有分区
        show partitions tablename;
    • 从文件load数据到hive.如果不加 local 则是hdfs上的文件
      load data [local] inpath '/opt/software/log/log2016_12_15.log' overwrite into table logdetail;
    • 创建hive与hbase的关联表(STORED BY前面的是hive中的表结构;mapping=后面的字符串表示hbase中对应的字段;:key表示rowkey;hbaseloghour是hbase的表名)
      CREATE TABLE log(time string,total int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
        WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f:total") TBLPROPERTIES ("hbase.table.name" = "hbaseloghour");

      

    参考:

    beeline 连接的问题

     


     

    其他

    1. Oozie-4.0.0-cdh5.3.6搭建


     

    附:

    ① 批处理执行脚本(当前节点为NameNode1)

    重新格式化时,需要删除数据的脚本

    echo --remove hdfs data
    rm -rf /opt/hdfsdata/datanode/*
    rm -rf /opt/hdfsdata/namenode/*
    rm -rf /home/hadoop/data/hdfs/namenode/*
    rm -rf /home/hadoop/data/hdfs/datanode/*
    
    ssh NameNode2 'rm -rf /opt/hdfsdata/datanode/*'
    ssh NameNode2 'rm -rf /opt/hdfsdata/namenode/*'
    ssh NameNode2 'rm -rf /home/hadoop/data/hdfs/namenode/*'
    ssh NameNode2 'rm -rf /home/hadoop/data/hdfs/datanode/*'
    
    ssh DataNode1 'rm -rf /opt/hdfsdata/datanode/*'
    ssh DataNode1 'rm -rf /opt/hdfsdata/namenode/*'
    ssh DataNode1 'rm -rf /home/hadoop/data/hdfs/namenode/*'
    ssh DataNode1 'rm -rf /home/hadoop/data/hdfs/datanode/*'
    
    ssh DataNode2 'rm -rf /opt/hdfsdata/datanode/*'
    ssh DataNode2 'rm -rf /opt/hdfsdata/namenode/*'
    ssh DataNode2 'rm -rf /home/hadoop/data/hdfs/namenode/*'
    ssh DataNode2 'rm -rf /home/hadoop/data/hdfs/datanode/*'
    
    ssh DataNode3 'rm -rf /opt/hdfsdata/datanode/*'
    ssh DataNode3 'rm -rf /opt/hdfsdata/namenode/*'
    ssh DataNode3 'rm -rf /home/hadoop/data/hdfs/namenode/*'
    ssh DataNode3 'rm -rf /home/hadoop/data/hdfs/datanode/*'
    
    echo --remove zookeeper data
    rm -rf ~/data/zookeeper/version-2/*
    rm -rf ~/data/zookeeper/zookeeper_server.pid
    ssh NameNode2 'rm -rf ~/data/zookeeper/version-2/*'
    ssh NameNode2 'rm -rf ~/data/zookeeper/zookeeper_server.pid'
    ssh DataNode1 'rm -rf ~/data/zookeeper/version-2/*'
    ssh DataNode1 'rm -rf ~/data/zookeeper/zookeeper_server.pid'
    ssh DataNode2 'rm -rf ~/data/zookeeper/version-2/*'
    ssh DataNode2 'rm -rf ~/data/zookeeper/zookeeper_server.pid'
    ssh DataNode3 'rm -rf ~/data/zookeeper/version-2/*'
    ssh DataNode3 'rm -rf ~/data/zookeeper/zookeeper_server.pid'
    
    
    echo --remove hadoop logs
    rm -rf /opt/software/hadoop-2.5.0-cdh5.3.6/tmp
    rm -rf /home/hadoop/logs/hadoop
    ssh NameNode2 'rm -rf /opt/software/hadoop-2.5.0-cdh5.3.6/tmp'
    ssh NameNode2 'rm -rf /home/hadoop/logs/hadoop'
    ssh DataNode1 'rm -rf /opt/software/hadoop-2.5.0-cdh5.3.6/tmp'
    ssh DataNode1 'rm -rf /home/hadoop/logs/hadoop'
    ssh DataNode2 'rm -rf /opt/software/hadoop-2.5.0-cdh5.3.6/tmp'
    ssh DataNode2 'rm -rf /home/hadoop/logs/hadoop'
    ssh DataNode3 'rm -rf /opt/software/hadoop-2.5.0-cdh5.3.6/tmp'
    ssh DataNode3 'rm -rf /home/hadoop/logs/hadoop'
    
    echo --remove hbase logs
    rm -rf ~/logs/hbase/*
    ssh NameNode2 'rm -rf ~/logs/hbase/*'
    ssh DataNode1 'rm -rf ~/logs/hbase/*'
    ssh DataNode2 'rm -rf ~/logs/hbase/*'
    ssh DataNode3 'rm -rf ~/logs/hbase/*'
    View Code

    启动过程的脚本

    echo --start zookeeper
    /opt/software/zookeeper-3.4.5-cdh5.3.6/bin/zkServer.sh start
    ssh NameNode2 '/opt/software/zookeeper-3.4.5-cdh5.3.6/bin/zkServer.sh start'
    ssh DataNode1 '/opt/software/zookeeper-3.4.5-cdh5.3.6/bin/zkServer.sh start'
    ssh DataNode2 '/opt/software/zookeeper-3.4.5-cdh5.3.6/bin/zkServer.sh start'
    ssh DataNode3 '/opt/software/zookeeper-3.4.5-cdh5.3.6/bin/zkServer.sh start'
    
    echo --start journalnodes cluster
    ssh DataNode1 '/opt/software/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start journalnode'
    ssh DataNode2 '/opt/software/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start journalnode'
    ssh DataNode3 '/opt/software/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start journalnode'
    
    echo --format one namenode
    /opt/software/hadoop-2.5.0-cdh5.3.6/bin/hdfs namenode -format
    /opt/software/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start namenode
    
    echo --format another namenode
    ssh NameNode2 '/opt/software/hadoop-2.5.0-cdh5.3.6/bin/hdfs namenode -bootstrapStandby'
    sleep 10
    ssh NameNode2 '/opt/software/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start namenode'
    sleep 10
    
    #echo --start all datanodes
    /opt/software/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemons.sh start datanode
    
    echo --zookeeper init
    /opt/software/hadoop-2.5.0-cdh5.3.6/bin/hdfs zkfc -formatZK
    
    echo --start hdfs
    /opt/software/hadoop-2.5.0-cdh5.3.6/sbin/start-dfs.sh
    
    echo --start yarn
    /opt/software/hadoop-2.5.0-cdh5.3.6/sbin/start-yarn.sh
    ssh NameNode2 '/opt/software/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh start resourcemanager'
    /opt/software/hadoop-2.5.0-cdh5.3.6/sbin/mr-jobhistory-daemon.sh  start historyserver
    /opt/software/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh start proxyserver
    View Code

    关于CentOS7minimal下MySql的安装

    ③用MapReduce操作HBase

    默认情况下,在MapReduce中操作HBase的时候 会出现各种  java.lang.NoClassDefFoundError 问题,这是因为没有提供相关jar包。解决方法:

    1. 把$HBASE_HOME/lib 里的所有jar包都拷贝到 $HADOOP_HOME/share/common/lib 下面
    2. 把$HBASE_HOME/conf/hbase-site.xml 拷贝到 $HADOOP_HOME/conf 下面
    3. 所有节点都执行以上操作(不需要重启hadoop)

    HBase官网文档中的路径是错误的,把jar包放到lib下面是没有用的

    ④hdfs相关命令

    //刷新节点
    $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes
    
    //查看目录大小
    hadoop dfs -count -q <dir>
    
    //查看目录下子目录大小
    hadoop dfs -du <dir>
  • 相关阅读:
    spring学习记录_Spring中的新注解
    spring学习记录_spring的 注解
    spring学习记录_spring的 ioc核心容器
    关于myeclipse项目运行报错:Access denied for user 'root'@'localhost' (using password: YES)
    vue项目中实现多语言切换
    OC中限制UITextView的最大字数的实现
    简单瀑布流的实现
    仿购物车的实现
    仿QQ好友列表界面的实现
    类似QQ侧滑菜单功能实现
  • 原文地址:https://www.cnblogs.com/TiestoRay/p/5997353.html
Copyright © 2011-2022 走看看