Hadoop&Hive安装全流程与踩坑实录

Hadoop&Hive安装全流程与踩坑实录,第1张

Hadoop&Hive安装全流程与踩坑实录 一、Hadoop安装配置启动流程 1、下载

下载地址:https://mirrors.tuna.tsinghua.edu.cn(清华大学开源软件镜像站);

具体地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.2/ (版本3.2.2)

2、解压后修改配置

一共需要修改七个文件(如果要配置集群则还需要再加上一个文件,共八个)

(1)hadoop-3.2.2/etc/hadoop目录下,修改“core-site.xml”:

增加


	
	
		fs.defaultFS
		hdfs://127.0.0.1:9000
	
	
	
		hadoop.tmp.dir
		/home/mi/DevelopHome/hadoop-3.2.2/hadoop_tempdir
	

(2)hadoop-3.2.2/etc/hadoop目录下,修改“hadoop-env.sh”:

增加

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
(3)hadoop-3.2.2/etc/hadoop目录下,修改“hdfs-site.xml”:

增加


	
	
        dfs.replication
        1
	

(4)hadoop-3.2.2/etc/hadoop目录下,修改“mapred-env.sh”:

增加

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
(5)hadoop-3.2.2/etc/hadoop目录下,修改“mapred-site.xml”:

增加


	
        mapreduce.application.classpath
  		/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/mapreduce/*, /home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/mapreduce/lib/*
         

    
    
        mapreduce.framework.name
        yarn
    

    
        yarn.app.mapreduce.am.env
        HADOOP_MAPRED_HOME=/home/mi/DevelopHome/hadoop-3.2.2
    

    
        mapreduce.map.env
        HADOOP_MAPRED_HOME=/home/mi/DevelopHome/hadoop-3.2.2
    

    
        mapreduce.reduce.env
        HADOOP_MAPRED_HOME=/home/mi/DevelopHome/hadoop-3.2.2
    

(6)hadoop-3.2.2/etc/hadoop目录下,修改“yarn-env.sh”:

增加

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
(7)hadoop-3.2.2/etc/hadoop目录下,修改“yarn-site.xml”:

增加


	
	
        yarn.resourcemanager.hostname
        127.0.0.1
    

    
    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    
    
    
    
        yarn.application.classpath
        /home/mi/DevelopHome/hadoop-3.2.2/etc/hadoop:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/common/lib/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/common/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/hdfs:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/hdfs/lib/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/hdfs/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/mapreduce/lib/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/mapreduce/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/yarn:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/yarn/lib/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/yarn/*
    


3、在profile添加Hadoop_Home

修改/etc/profile,添加如下:

export HADOOP_HOME=/home/mi/DevelopHome/hadoop-3.2.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

注意修改后在终端录入:

source /etc/profile 

使其立刻生效。

4、初始化hdfs文件夹

在master上格式化hdfs文件系统:

hdfs namenode -format

这个命令只能在指定的namenode上输入,初始化后会在二(1)配置的临时文件中生成初始文件,该初始化过程一般只在最开始安装完成hadoop后初始化一次。

5、设置本机ssh权限

如果跳过本步执行下面,会报出无权限的问题,需要设置。

(1)生成ssh公钥和私钥(如果已经进行git的ssh设置则可以直接跳过此步,进行下面的追加公钥):
ssh-keygen

会让你指定公钥和私钥的生成地址,默认在.ssh目录中,一路下一步就好。

(2)追加公钥:

将公钥追加到本地的认证文件中:

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
6、在master上启动hdfs集群

在新的终端下启动hdfs和yarn

start-dfs.sh
start-yarn.sh

或者直接全部启动:

start-all.sh

如果没有设置免密登录 此时就会多次报出无权限。

到此为止,hadoop配置并启动完成!
hadoop3的http默认端口号为9870(2为50070),
namenode默认端口号为9820(2为8020),
yarn的http端口号为8088,可以查看任务提交情况。

二、Hive安装配置启动流程 1、下载

下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.2/

2、解压后修改配置

一共需要修改两个文件

(1)/apache-hive-3.1.2-bin/conf目录下,复制“hive-env.sh.template”文件,修改为“hive-env.sh”:

增加

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64

HADOOP_HOME=/home/mi/DevelopHome/hadoop-3.2.2
(2)/apache-hive-3.1.2-bin/conf目录下,复制“hive-default.xml.template”文件,修改为“hive-site.xml”:

去掉


......

所有配置,然后再增加



  
  hive.metastore.warehouse.dir  
  /user/hive_remote/warehouse  
  
   
  
  hive.metastore.local  
  true  
  
   
  
  javax.jdo.option.ConnectionURL  
  jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=false 
  
   
  
  javax.jdo.option.ConnectionDriverName  
  com.mysql.jdbc.Driver  
  
   
  
  javax.jdo.option.ConnectionUserName  
  root  
  
   
  
  javax.jdo.option.ConnectionPassword  
  123456  


    hive.metastore.schema.verification
    false


datanucleus.autoCreateTables
true
不存在时,自动创建Hive元数据表


datanucleus.autoCreateColumns
true
不存在时,自动创建Hive元数据列


datanucleus.fixedDatastore
false


datanucleus.autoStartMechanism
SchemaTable
   

3、在profile添加Hive_Home

修改/etc/profile,添加如下:

export HIVE_HOME=/home/mi/DevelopHome/apache-hive-3.1.2-bin
export PATH=$HIVE_HOME/bin:$PATH

注意修改后在终端录入:

source /etc/profile 

使其立刻生效。

4、真正启动Hive前的问题处理: (1)guava的jar包版本冲突问题:

apache-hive-3.1.2-bin/lib下的guava版本为19,hadoop-3.2.2/share/hadoop/common/lib下的guava版本为27,两者的不一致,会导致启动hive相关时报出找不到方法的异常,因此将apache-hive-3.1.2-bin/lib下的guava直接替换成hadoop的版本27的,从而解决。

(2)mysql的jar包引入问题

用mysql作为metastore,需要在apache-hive-3.1.2-bin/lib下引入“mysql-connector-java-5.1.47.jar”(版本可自行选择)

5、启动hive的metastore

在新的终端下

hive --service metastore
6、启动hiveserver2

在新的终端下

hive --service hiveserver2
7、启动Hive

由于已经修改了/etc/profile,则在新的终端下直接录入

hive

到此为止,hive配置启动完成!

注释:以上的启动新终端的流程,可以直接利用后台执行的方式:

nohup 要执行的指令 &
8、创建表后mysql的metastore的查看

进入mysql的hive库后查看表,DBS表内存储着元数据,COLUMNS_V2表存储着表对应的字段信息,TBLS表可以查看表owner以及该表到底是内部表还是外部表,PARTITIONS表可以查看分区信息。

9、利用jdbc连接hive

hive默认的对本机的连接ip端口为:jdbc:hive2://127.0.0.1:10000
driverName为:org.apache.hive.jdbc.HiveDriver

(1)在maven中引入pom文件:


        
            org.apache.hadoop
            hadoop-common
            3.2.2
            
                
                    log4j
                    log4j
                
            
        
        
            org.apache.hadoop
            hadoop-client
            3.2.2
        
        

        
            org.apache.hive
            hive-metastore
            3.1.2
        
        
            org.apache.hive
            hive-exec
            3.1.2
        
        
            org.apache.hive
            hive-jdbc
            3.1.2
        
    
(2)写入java代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class HiveConnection {
  private static final String driverName = "org.apache.hive.jdbc.HiveDriver";
  private static final String url = "jdbc:hive2://127.0.0.1:10000";
  private static Connection con = null;
  private static Statement state = null;
  private static ResultSet res = null;
  
  public static void main(String[] args) throws Exception {
    Class.forName(driverName);
    con = DriverManager.getConnection(url);
    state = con.createStatement();
    res = state.executeQuery("show databases");//执行的sql为查询所有db
    while (res.next()) {
      System.out.println(res.getString(1));
    }
  }
}

此时直接执行会报出禁止匿名访问、拒绝连接等错误,所以需要在hadoop的core-site.xml配置文件中对访问进行开放。

(3)修改hadoop的core-site.xml

在core-site.xml的 configuration标签中加入property,如下:

	
		hadoop.proxyuser.mi.groups
		*
	
	
	
		hadoop.proxyuser.mi.hosts
		*
	

此时再去执行jdbc连接,可以成功获得结果!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5681053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存