为Spark部署HADOOP2.6的HDFS集群

Single Node

HADOOP的安装,参考官方文档:
http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/SingleCluster.html
关于HDFS的不错的文章:
http://www.cnblogs.com/xia520pi/archive/2012/05/28/2520813.html
注意:只需要配置hdfs即可,不需要配置yarn。
注意:关于SSH的keys,可以参考官方文档的配置,大致就是能够直接ssh到机器。

Cluster Setup

HADOOP的集群安装,参考官方文档:
http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/ClusterSetup.html
注意:按照single cluster配置好每个hdfs。
注意:hdfs的fs.defaultFS换成域名就好。
注意:etc/hadoop/masters不再使用了,只有etc/hadoop/slaves有用。
注意:格式化的参数应该是hdfs的namenode的名字,即配置在core-site.xml中的fs.defaultFS的域名。
注意:关于SSH的keys,可以参考官方文档的配置,大致就是能够直接ssh到机器。

Machines

配置一个HDFS集群,一个namenode,两个datanode,一个客户端。

  • Namenode: 192.168.9.109
  • Datanode: 192.168.9.149,192.168.9.60
  • Client: 192.168.9.96

另外,用到的HDF URI是:hdfs://hdfs.winlin.cn:9000

Install Hadoop

HADOOP的安装:

tar xf jdk-8u45-linux-x64.tar.gz && tar xf hadoop-2.6.0.tar.gz &&
sudo mv jdk1.8.0_45/ /usr/local/ && sudo mv hadoop-2.6.0 /usr/local/ &&
cd /usr/local/ &&  sudo ln -sf jdk1.8.0_45/ jdk && sudo ln -sf hadoop-2.6.0/ hadoop  &&
cd ~ && ln -sf /usr/local/hadoop

Hosts

它们的sudo vim /etc/hosts的配置如下:

# namenode
192.168.9.109 hdfs.winlin.cn

其中,namenode和datanode都需要配置这个。另外,将/etc/hostname改成唯一的,否则两个datanode有同样的hostname时会在web上显示不出来。
修改hostname的命令:

sudo vi /etc/hostname

然后在hosts中添加一个记录,譬如hostname是namenode时:

127.0.1.1   namenode

注意:修改hostname后必须重启机器才能格式化hdfs。
注意:namenode的hosts也必须用它的外网IP,否则datanode无法连接上,hadoop会解析这个域名后侦听ip。

PATH Setup

它们的sudo vim /etc/profile添加执行路径:

# big data.
export JAVA_HOME=/usr/local/jdk
export HADOOP_PREFIX=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin

注意:让profile立刻生效,可以执行source /etc/profile

HDFS Config

Namenode和Datanode的vim ~/hadoop/etc/hadoop/core-site.xml的配置如下:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hdfs.winlin.cn:9000</value>
    </property>
</configuration>

注意:启动时用命令hadoop-daemon.sh start namenode启动namenode。

Namenode需要配置dfs.namenode.name.dir,默认在/tmp下面,重启系统后将需要重新格式化HDFS,并且信息全部丢失。
修改Namenode的配置vim ~/hadoop/etc/hadoop/hdfs-site.xml,配置目录:

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/usr/local/hadoop/hdfs/namenode</value>
    </property>
</configuration>

使用命令创建目录mkdir -p /usr/local/hadoop/hdfs/namenode

Datanode也需要配置dfs.datanode.data.dir,默认在/tmp下面,重启后数据全部丢失,但估计会自己恢复(如果全部datanode重启,就没法恢复了)。
修改Datanode的配置vim ~/hadoop/etc/hadoop/hdfs-site.xml,配置目录:

<configuration>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/usr/local/hadoop/hdfs/datanode</value>
    </property>
</configuration>

使用命令创建目录mkdir -p /usr/local/hadoop/hdfs/datanode

Format HDFS

Namenode上格式化HDFS:

hdfs namenode -format hdfs.winlin.cn

注意:需要在设置好hostname后格式化;只需要格式化一次。

Start HDFS

Namenode启动:

hadoop-daemon.sh start namenode

访问web看是否启动成功:http://hdfs.winlin.cn:50070
注意:作为datanode启动时只需要配置好core-site.xml,并不需要namenode中配置好slaves。
注意:datanode是不需要指定slaves的,它根本不关心这个东西。
注意:默认只要datanode配置了同样的hdfs uri,就会加入到这个master,可以通过slaves限制,具体参考dfs.namenode.hosts配置。
注意:启动时用命令hadoop-daemon.sh start datanode启动datanode。

Datanode启动:

hadoop-daemon.sh start datanode

访问web看是否有datanode了:http://hdfs.winlin.cn:50070/dfshealth.html#tab-datanode
注意:如果两个datanode的hostname是冲突的,在web中只能看到一个,但是实际上应该时没有问题的。

Client Usage

客户端Client,他们的vim ~/hadoop/etc/hadoop/hdfs-site.xml配置如下:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>

注意:这个dfs.replication是客户端配置,也就是namenode和datanode都不需要配置。

拷贝文件到hdfs:

echo "Hello, HDFS~" >hello.txt && 
hdfs dfs -mkdir -p /srs &&
hdfs dfs -rm -f /srs/hello.txt && 
hdfs dfs -copyFromLocal hello.txt /srs

查看拷贝的文件:http://hdfs.winlin.cn:50070/explorer.html#/srs
或者使用命令: hdfs dfs -cat /srs/hello.txt
或者查看文件信息: hdfs dfs -ls /srs/hello.txt

Others

下面是其他常用的命令。
重启namenode的命令:

hadoop-daemon.sh stop namenode && hadoop-daemon.sh start namenode

重启datanode的命令:

hadoop-daemon.sh stop datanode && hadoop-daemon.sh start datanode

HDFS集群就搭好了,可以给Spark用了。

Ports

可以设置几个端口,默认这些端口都是侦听在0.0.0.0,也就是都能访问的地址。可以侦听到内网地址,或者本机地址。

    <property>
        <name>dfs.http.address</name>
        <value>127.0.0.1:50070</value>
    </property>
    <property>
        <name>dfs.datanode.address</name>
        <value>127.0.0.1:50010</value>
    </property>
    <property>
        <name>dfs.datanode.http.address</name>
        <value>127.0.0.1:50075</value>
    </property>
    <property>
        <name>dfs.datanode.ipc.address</name>
        <value>127.0.0.1:50020</value>
    </property>

或者改成其他端口也可以。

你可能感兴趣的:(为Spark部署HADOOP2.6的HDFS集群)