目录:


第一步:准备相关材料

我是要在另一台新服务器上搭建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  > /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 '\t'

注:

  • 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/*'

启动过程的脚本

echo --start zookeeper
/opt/software/zookeeper-3.4.-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.-cdh5.3.6/bin/hdfs namenode -format
/opt/software/hadoop-2.5.-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
ssh NameNode2 '/opt/software/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start namenode'
sleep #echo --start all datanodes
/opt/software/hadoop-2.5.-cdh5.3.6/sbin/hadoop-daemons.sh start datanode echo --zookeeper init
/opt/software/hadoop-2.5.-cdh5.3.6/bin/hdfs zkfc -formatZK echo --start hdfs
/opt/software/hadoop-2.5.-cdh5.3.6/sbin/start-dfs.sh echo --start yarn
/opt/software/hadoop-2.5.-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.-cdh5.3.6/sbin/mr-jobhistory-daemon.sh start historyserver
/opt/software/hadoop-2.5.-cdh5.3.6/sbin/yarn-daemon.sh start proxyserver

关于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>

Hadoop2.5.0 搭建实录的更多相关文章

  1. 基于hadoop2.6.0搭建5个节点的分布式集群

    1.前言 我们使用hadoop2.6.0版本配置Hadoop集群,同时配置NameNode+HA.ResourceManager+HA,并使用zookeeper来管理Hadoop集群 2.规划 1.主 ...

  2. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十)安装hadoop2.9.0搭建HA

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  3. 【安装】Hadoop2.8.0搭建过程整理版

    Hadoop搭建过程 前期环境搭建主要分为软件的安装与配置文件的配置,集成的东西越多,配置项也就越复杂. Hadoop集成了一个动物园,所以配置项也比较多,且每个版本之间会有少许差异. 安装的方式有很 ...

  4. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二)安装hadoop2.9.0

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  5. Hadoop2.2.0分布式安装配置详解[1/3]

    前言 在寒假前的一段时间,开始调研Hadoop2.2.0搭建过程,当时苦于没有机器,只是在3台笔记本上,简单跑通一些数据.一转眼一两个月过去了,有些东西对已经忘了.现在实验室申请下来了,分了10台机器 ...

  6. 分布式集群搭建(hadoop2.6.0+CentOS6.5)

    摘要:之前安装过hadoop1.2.1集群,发现比较老了,后来安装cloudera(hadoop2.6.0),发现集成度比较高,想知道原生的hadoop什么样子,于是着手搭建一个伪分布式集群(三台), ...

  7. Linux下Hadoop2.6.0集群环境的搭建

    本文旨在提供最基本的,可以用于在生产环境进行Hadoop.HDFS分布式环境的搭建,对自己是个总结和整理,也能方便新人学习使用. 基础环境 JDK的安装与配置 现在直接到Oracle官网(http:/ ...

  8. Hadoop2.6.0(2.4~2.7)完全分布式搭建-入门向 新手向 详细流程

    .caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.tabl ...

  9. CentOS6.4上搭建hadoop-2.4.0集群

    公司Commerce Cloud平台上提供申请主机的服务.昨天试了下,申请了3台机器,搭了个hadoop环境.以下是机器的一些配置: emi-centos-6.4-x86_64medium | 6GB ...

随机推荐

  1. vue+node开发手机端h5页面开发遇到的坑

    项目进行中...随时更新 这里记录了一些手机端调试的方式 一 css 1.文字超过span宽度显示...(单行文字) .topWrap .introduce span { padding: 0 17p ...

  2. jQuery打造智能提示插件

    插件根据实际需要在单功能上封装的,实现传入后台数据地址,要保存值的input,前台要传入的参数(过滤条件),来返回下拉提示数据,数据过多可上下滚动选择,选择后显示文本与对应的值,供后台操作,如图: j ...

  3. 教你快速高效接入SDK——服务器端支付回调的处理方式

    转载自:http://blog.csdn.net/chenjie19891104/article/details/48321427今天着重把之前渠道服务器端SDK的时候,遇到的一个蛋疼的问题给解决了. ...

  4. 工作流引擎Oozie(二):coordinator

    1. 简介 coordinator是workflow的定时提交器,基于时间条件与数据生成触发(based on time and data triggers).简单点说,coordinator按所定义 ...

  5. Linux iptables原理--数据包流向

    Iptable与Netfilter 在上一篇文章 linux iptables常用命令--配置一个生产环境的iptables 我们知道iptables有好几个表,如raw,mangle,nat,fil ...

  6. [Web API] Web API 2 深入系列(3) 激活HttpController

    目录 HttpController 创建HttpController IAssembliesResolver IHttpControllerTypeResolver HttpControllerTyp ...

  7. Xamarin.Android之封装个简单的网络请求类

    一.前言 回忆到上篇 <Xamarin.Android再体验之简单的登录Demo> 做登录时,用的是GET的请求,还用的是同步, 于是现在将其简单的改写,做了个简单的封装,包含基于Http ...

  8. android Can't bind to local 86XX for debugger

    For some reason eclipse DDMS always gives the error 'Can't bind to local 86XX for debugger' every ti ...

  9. centos安装禅道的步骤

    1.下载 XAMPP 套件: https://sourceforge.net/projects/xampp/files/XAMPP%20Linux/stats/timeline  下载的文件是 xam ...

  10. 为什么volatile不能保证原子性而Atomic可以?

    在上篇<非阻塞同步算法与CAS(Compare and Swap)无锁算法>中讲到在Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值 ...