how_to_install_hadoop_hive_by_docker

#install hadoop 2.7.2#refer to:http://tashan10.com/yong-dockerda-jian-hadoopwei-fen-bu-shi-ji-qun/


##install docker firstly##
$ sudo apt-get install apt-transport-https
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker




###Docker去sudo###
在Ubuntu下,在执行Docker时,每次都要输入sudo,同时输入密码,这里把当前用户执行权限添加到相应的docker用户组里面
#添加一个新的docker用户组
sudo groupadd docker
# 添加当前用户到docker用户组里,注意这里的datahub为ubuntu登录用户名
sudo gpasswd -a datahub docker
# 重启Docker后台监护进程
sudo service docker restart
# 重启之后,尝试一下,是否生效
docker version
#若还未生效,则系统重启,则生效
sudo reboot


###下载Centos镜像###
docker pull centos:6.6
下载完成以后,使用docker images,可以列出所有本地的镜像:
datahub@datahub:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              Hue                 8d6fe2d2205f        2 days ago          4.88GB
centos              hue_orgin           97a4cd3ce3cc        3 days ago          4.62GB
centos              hadoop_hive         d3b84d033c20        3 days ago          1.54GB
centos              hadoop              ff78063f88f7        10 days ago         1.23GB
centos              java                21fbd1c5b8de        11 days ago         646MB
ubuntu              16.04               747cb2d60bbe        4 weeks ago         122MB
ubuntu              latest              747cb2d60bbe        4 weeks ago         122MB
centos              latest              196e0ce0c9fb        8 weeks ago         197MB
centos              6.6                 21edfae4b8fd        8 weeks ago         203MB




启动第一个容器
docker run -ti centos:6.6
我们刚刚的docker run -ti ubuntu命令中没有指定执行程序,Docker默认执行/bin/bash
datahub@datahub:~$ docker run -ti centos:6.6
root@009fe5728aba:/# 


容器启动起来了,接下来就是安装Java、Hadoop及相关配置了(yum)。


##jdk1.8 should acquire from Official sources(官方源)
make sure java has installed well: java -version


另外,大家可以将装好java的镜像保存为一个副本,他日可以在此基础上构建其他镜像。命令如下:


root@122a2cecdd14:~# exit
docker commit -m "java install" 122a2cecdd14 centos:java
上面命令中122a2cecdd14为当前容器的ID, centos:java是为新的镜像指定一个标识,centos为仓库名,java是Tag




如何获取容器ID:


    有个简便的办法找到此ID,就是命令行用户名@后面的那一串字符。这个方法只在容器启动时没有指定hostname时才能用。
    使用docker ps列出所有运行的容器,在命令结果中查看


##Hadoop安装##




使用刚刚已经安装了Java的容器镜像启动:


docker run -ti centos:java


启动成功了,我们开始安装Hadoop。这里,我们直接使用wget下载安装文件。
1.先安装wget:


sudo yum install -y wget


2.下载并解压安装文件:


root@8ef06706f88d:cd ~
root@8ef06706f88d:~# mkdir soft
root@8ef06706f88d:~# cd soft/
root@8ef06706f88d:~/soft# mkdir apache
root@8ef06706f88d:~/soft# cd apache/
root@8ef06706f88d:~/soft/apache# mkdir hadoop
root@8ef06706f88d:~/soft/apache# cd hadoop/
root@8ef06706f88d:~/soft/apache/hadoop# wget http://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
root@8ef06706f88d:~/soft/apache/hadoop# tar xvzf hadoop-2.7.2.tar.gz


注意:这里我们安装的Hadoop版本是2.7.2,如果需要其他版本,请在这里找到链接地址后修改命令即可。
3.配置环境变量


修改~/.bashrc文件。在文件末尾加入下面配置信息:
export JAVA_HOME=/opt/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/root/soft/apache/hadoop/hadoop-2.7.2
export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin


4.配置Hadoop


下面,我们开始修改Hadoop的配置文件。主要配置core-site.xml、hdfs-site.xml、mapred-site.xml这三个文件。


开始配置之前,执行下面命令:


root@8ef06706f88d:~# cd $HADOOP_HOME/
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2# mkdir tmp
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2# cd tmp/
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2/tmp# pwd
/root/soft/apache/hadoop/hadoop-2.7.2/tmp
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2/tmp# cd ../
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2# mkdir namenode
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2# cd namenode/
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2/namenode# pwd
/root/soft/apache/hadoop/hadoop-2.7.2/namenode
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2/namenode# cd ../
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2# mkdir datanode
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2# cd datanode/
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2/datanode# pwd
/root/soft/apache/hadoop/hadoop-2.7.2/datanode
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2/datanode# cd $HADOOP_CONFIG_HOME/
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2/etc/hadoop# cp mapred-site.xml.template mapred-site.xml
root@8ef06706f88d:~/soft/apache/hadoop/hadoop-2.7.2/etc/hadoop# nano hdfs-site.xml


这里创建了三个目录,后续配置的时候会用到:


    tmp:作为Hadoop的临时目录
    namenode:作为NameNode的存放目录
    datanode:作为DataNode的存放目录
1).core-site.xml配置
<configuration>
    <property>
            <name>hadoop.tmp.dir</name>
            <value>/root/soft/apache/hadoop/hadoop-2.7.2/tmp</value>
            <description>A base for other temporary directories.</description>
    </property>


    <property>
            <name>fs.default.name</name>
            <value>hdfs://master:9000</value>
            <final>true</final>
            <description>The name of the default file system.  A URI whose
            scheme and authority determine the FileSystem implementation.  The
            uri's scheme determines the config property (fs.SCHEME.impl) naming
            the FileSystem implementation class.  The uri's authority is used to
            determine the host, port, etc. for a filesystem.</description>
    </property>
</configuration>
注意:


    hadoop.tmp.dir配置项值即为此前命令中创建的临时目录路径。
    fs.default.name配置为hdfs://master:9000,指向的是一个Master节点的主机(后续我们做集群配置的时候,自然会配置这个节点,先写在这里)




2).hdfs-site.xml配置


使用命令nano hdfs-site.xml编辑hdfs-site.xml文件:
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
        <final>true</final>
        <description>Default block replication.
        The actual number of replications can be specified when the file is created.
        The default is used if replication is not specified in create time.
        </description>
    </property>


    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/root/soft/apache/hadoop/hadoop-2.7.2/namenode</value>
        <final>true</final>
    </property>


    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/root/soft/apache/hadoop/hadoop-2.7.2/datanode</value>
        <final>true</final>
    </property>
</configuration>


注意:


    我们后续搭建集群环境时,将配置一个Master节点和两个Slave节点。所以dfs.replication配置为2。
    dfs.namenode.name.dir和dfs.datanode.data.dir分别配置为之前创建的NameNode和DataNode的目录路径
3).mapred-site.xml配置


Hadoop安装文件中提供了一个mapred-site.xml.template,所以我们之前使用了命令cp mapred-site.xml.template mapred-site.xml,创建了一个mapred-site.xml文件。下面使用命令nano mapred-site.xml编辑这个文件:
<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>master:9001</value>
        <description>The host and port that the MapReduce job tracker runs
        at.  If "local", then jobs are run in-process as a single map
        and reduce task.
        </description>
    </property>
</configuration>


这里只有一个配置项mapred.job.tracker,我们指向master节点机器。


4)修改JAVA_HOME环境变量


使用命令.nano hadoop-env.sh,修改如下配置:


# The java implementation to use.
export JAVA_HOME=/opt/jdk
5)格式化 namenode


这是很重要的一步,执行命令hadoop namenode -format


5.安装SSH


搭建集群环境,自然少不了使用SSH。这可以实现无密码访问,访问集群机器的时候很方便。


root@8ef06706f88d:~# yum -y install openssh-server openssh-clients


SSH装好了以后,由于我们是Docker容器中运行,所以SSH服务不会自动启动。需要我们在容器启动以后,手动通过/usr/sbin/sshd 手动打开SSH服务。未免有些麻烦,为了方便,我们把这个命令加入到~/.bashrc文件中。通过nano ~/.bashrc编辑.bashrc文件(nano没有安装的自行安装,也可用vi),在文件后追加下面内容:


#autorun
/usr/sbin/sshd


6.生成访问密钥


root@8ef06706f88d:/# cd ~/
root@8ef06706f88d:~# ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa
root@8ef06706f88d:~# cd .ssh
root@8ef06706f88d:~/.ssh# cat id_dsa.pub >> authorized_keys


注意: 这里,我的思路是直接将密钥生成后写入镜像,免得在买个容器里面再单独生成一次,还要相互拷贝公钥,比较麻烦。当然这只是学习使用,实际操作时,应该不会这么搞,因为这样所有容器的密钥都是一样的!!




##error##ssh:The authenticity of host xx can’t be established####
描述:集群已经配置了ssh免密钥登陆,然后出现“The authenticity of host xx can’t be established”,输入yes后可以正常操作。
解决办法:
修改/etc/ssh/ssh_config:
    StrictHostKeyChecking no  
    UserKnownHostsFile /dev/null  
重启:
   sshd restart   
##error##ssh:The authenticity of host xx can’t be established####


6.保存镜像副本


这里我们将安装好Hadoop的镜像保存为一个副本。


root@8ef06706f88d:~# exit
datahub@datahub:~$ docker commit -m "hadoop install" 8ef06706f88d centos:hadoop


##at this time all of process of hadoop install has finished!
We can use the steps in "hadoop_hive_mysql_docker_Document" to check whether the hadoop was installed correctly!##










 




#install hive-2.0.1#
refer:
http://www.cnblogs.com/tq03/p/5107949.html
http://www.cnblogs.com/chybin/p/5700092.html#_Toc457109607


Official Source:https://archive.apache.org/dist/hive/hive-2.0.1/
安装HIVE的前提是:
1.先要安装好HADOOP,然后使用<$HADOOP_HOME/bin/hdfs namenode -format>命令来启动namenode和datanode。启动后可以用jps来查看是否启动成功
2.一定要有DataNode才说明正常启动HADOOP了,也可以通过$HADOOP_HOME/bin/hadoop dfsadmin -report来查看是namenode和datanode否正常,如果配置都是0那肯定是异常了.


choose本地模式安装:


这种安装方式和嵌入式的区别在于,不再使用内嵌的Derby作为元数据的存储介质,而是使用其他数据库比如MySQL来存储元数据。这种方式是一个多用户的模式,运行多个用户client连接到一个数据库中。这种方式一般作为公司内部同时使用Hive。这里有一个前提,每一个用户必须要有对MySQL的访问权利,即每一个客户端使用者需要知道MySQL的用户名和密码才行。下面开始正式搭建,这里要求hadoop系统已经正常启动,且MySQL数据库已经正确安装。


1、首先登录MySQL,创建一个数据库,这里命名为hive,数据库名是可以随意定义的。
创建hive用户,并赋予所有的权限:


CREATE USER 'hive1'@'localhost' IDENTIFIED BY 'hive1';


GRANT ALL PRIVILEGES ON *.* TO hive1 IDENTIFIED BY 'hive1'  WITH GRANT OPTION;


2、将MySQL的JDBC驱动包拷贝到hive的安装目录中,驱动包自行查找下载。


cp mysql-connector-java-5.1.44-bin.jar /usr/local/apache-hive-2.0.1-bin/lib/


####jdbc jar should copy to ${HIVE_HOME}/lib(maybe we should make some notice on the version of mysql and mysql jdbc jar)###


3、将HIVE_HOME/conf下的hive-default.xml.template拷贝一份:


cp hive-default.xml.template hive-site.xml




4、修改hive-site.xml文件:


该配置文件有3300多行,选择其中的几个选项进行修改即可。


A、修改javax.jdo.option.ConnectionURL属性。


<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost/hive?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
</property>


B、修改javax.jdo.option.ConnectionDriverName属性。


<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
</property>


C、修改javax.jdo.option.ConnectionUserName属性。即数据库用户名。


<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive1</value>
    <description>Username to use against metastore database</description>
</property>


D、修改javax.jdo.option.ConnectionPassword属性。即数据库密码。


<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive1</value>
    <description>password to use against metastore database</description>
</property>


E、添加如下属性hive.metastore.local:


<property>
    <name>hive.metastore.local</name>
    <value>true</value>
    <description>controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM</description>
</property>


##################################################################################
The absolute and concrete path below is very important, unless there will be some errors.


hive 配置 mysql时的问题(Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D):
解决方案:将hive-site.xml配置文件的
hive.querylog.location
hive.exec.local.scratchdir
hive.downloaded.resources.dir
三个值(原始为$标识的相对路径)写成绝对值
##################################################################################
F、修改hive.server2.logging.operation.log.location属性,因为默认的配置里没有指定具体的路径。


<property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>/tmp/hive/operation_logs</value>
    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>
</property>


G、修改hive.exec.local.scratchdir属性。


<property>
    <name>hive.exec.local.scratchdir</name>
    <value>/tmp/hive</value>
    <description>Local scratch space for Hive jobs</description>
</property>


H、修改hive.downloaded.resources.dir属性。


<property>
    <name>hive.downloaded.resources.dir</name>
    <value>/tmp/hive/resources</value>
    <description>Temporary local directory for added resources in the remote file system.</description>
</property>


I、修改属性hive.querylog.location属性。


<property>
    <name>hive.querylog.location</name>
    <value>/tmp/hive/querylog</value>
    <description>Location of Hive run time structured log file</description>
</property>


5、配置hive的log4j配置文件。


cp hive-log4j.properties.template hive-log4j.properties


6、用hive下的jline-2.12.jar替换掉hadoop自带的包,不然会报错。


cp /usr/local/apache-hive-2.0.1-bin/lib/jline-2.12.jar /root/soft/apache/hadoop/hadoop-2.7.2/share/hadoop/yarn/lib/   


rm -rf /root/soft/apache/hadoop/hadoop-2.7.2/share/hadoop/yarn/lib/jline-0.9.94.jar


7、配置hive-env.sh,配置好JAVA_HOME和HADOOP_HOME
配置了HADOOP_HOME参数后,hive就可以知道Hadoop在哪里,数据存储在哪里了。


####hive should update its path to /etc/profile####
#################################################
#set hadoop environment
export HADOOP_HOME=/root/soft/apache/hadoop/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export HIVE_HOME=/usr/local/apache-hive-2.0.1-bin
export PATH=$PATH:$HIVE_HOME/bin
###################################################
source /etc/profile




5、启动metastore服务


必须先启动metastore服务,再启动hive:hive --service metastore 2>&1 >> /var/log.log &


6、启动Hadoop:start-all.sh


7、启动Hive:此时,执行hive客户端,访问的元数据就是通过metastore来访问mysql上存储的元数据了。


8、hue or hive client use remote way to connect hiveserver2, so we should start the hiverserver2 firstly!
# hive --service hiveserver2 2>&1 >> /var/log.log &




######!!!remember to commit the changes to docker images to save the changes permantly.######







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值