基於阿里雲搭建hadoop平臺

1. 前言

基於阿里雲搭建hadoop平臺,並實現遠程訪問調用
需要在安全組開放如下端口:
9000
50010
50070

2. 添加hadoop用戶

添加用戶,防止誤操作搞崩了,密碼自己設置。

useradd hadoop
passwd hadoop
usermod -aG wheel Hadoop

3. 配置/etc/hosts文件

左邊是集羣的內網ip,右邊是你的主機名

172.31.18.35   k8s-master
172.31.18.36   k8s-node1

4. 設置ssh免密登錄

4.1 安裝ssh

檢測是否安裝:

 rpm -qa | grep ssh

安裝:

yum list | grep ssh 
yum install -y <clients>
yum install -y <server>

4.2 設置免密

ssh-keygen -t rsa -P '' 
ssh-copy-id k8s-master
ssh-copy-id k8s-node1

5. 安裝JDK

sudo yum update
sudo yum install java-1.8.0-openjdk-devel

6. 安裝hadoop

mkdir software
cd software
wget https://www-us.apache.org/dist/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
tar xvf hadoop-2.7.7.tar.gz
mv hadoop-2.7.7 hadoop

7. 配置環境變量

找到jdk目錄:

update-alternatives --display java

發現:

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre

然後修改/etc/profile文件:

vim /etc/profile
source /etc/profile

插入:

#java
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre
export PATH=$PATH:$JAVA_HOME/bin
#hadoop
export HADOOP_HOME=/home/hadoop/software/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

8. 配置hadoop

8.1 hadoop-env.sh

vim  /home/hadoop/software/hadoop/etc/hadoop/hadoop-env.sh

修改JAVA_HOME:

export  JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
-1.8.0.232.b09-0.el7_7.x86_64/jre

8.2 core-site.xml

vim  /home/hadoop/software/hadoop/etc/hadoop/core-site.xml
<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://k8s-master:9000</value>
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/software/hadoop/tmp</value>
 </property>
</configuration>

8.3 hdfs-site.xml

vim /home/hadoop/software/hadoop/etc/hadoop/hdfs-site.xml
<configuration> 
    <property>
            <name>dfs.replication</name>
            <value>2</value>
    </property>
</configuration>

8.4 mapred-site.xml

mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
	<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobtracker.address</name>
        <value>yarn</value>
    </property>

8.5 yarn-site.xml

vim yarn-site.xml
<configuration>
    <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>k8s-master</value>
    </property>

    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>
</configuration>

8.6 Slaves

vim slaves

添加你的主機名,添加的節點爲datanode節點

k8s-master
k8s-node1

9. 格式化namenode

在k8s-master:

hdfs namenode -format

啓動hadoop

start-all.sh

10. 遠程訪問

10.1 配置主機hosts文件

C:\Windows\System32\drivers\etc

【對應的公網ip】	k8s-master
【對應的公網ip】	k8s-node1

10.2 Maven配置

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.7.7</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.7.7</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.7.7</version>
</dependency>

10.3 代碼示例

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

/**
 * @author lhd
 */
public class HdfsDemo {

    private static final String HDFS_API = "hdfs://47.105.83.226:9000";
    static Configuration configuration = null;
    static FileSystem fileSystem = null;

    /**
     * 初始化
     */
    public static void init(){
        System.setProperty("HADOOP_USER_NAME", "hadoop");
        configuration = new Configuration();
        configuration.set("dfs.client.use.datanode.hostname", "true");
        try {
            fileSystem = FileSystem.get(URI.create(HDFS_API), configuration);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 創建文件api
     */
    public static void createFolder(){
        try{
            //在指定的路徑下創建文件夾
            Path path = new Path("/demo");
            fileSystem.mkdirs(path);
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    /**
     * 遞歸顯示文件
     * @param path 文件路徑
     */
    public static void listFile(Path path){

        try{
            //FileStatus對象封裝了文件和目錄的元數據,包括文件長度、塊大小、權限等信息
            FileStatus[] fileStatusesArray = fileSystem.listStatus(path);
            for(int i=0; i< fileStatusesArray.length; i++){
                FileStatus fileStatus = fileStatusesArray[i];
                //首先檢查當前是否爲文件夾,如果是則遞歸
                if(fileStatus.isDirectory()){
                    System.out.println("當前路徑是:"+ fileStatus.getPath());
                    listFile(fileStatus.getPath());
                }else
                    System.out.println("當前路徑是:"+fileStatus.getPath());
            }
        }catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 文件上傳
     */
    public static void uploadFile(){
        try{
            Path src = new Path("e://a.txt");
            Path dest = new Path("/demo/a.txt");
            fileSystem.copyFromLocalFile(src, dest);
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    /**
     * 文件下載
     */
    public static void downloadFile(){
        try{
            Path src = new Path("/demo/a.txt");   // 下載源地址
            Path dest = new Path("e://b.txt"); // 下載目的地址
            //從服務器下載到本地
            fileSystem.copyToLocalFile(src, dest);
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {

        init();
        createFolder();
        uploadFile();
        downloadFile();
        listFile(new Path("/"));
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章