Hive 2.3.x MySQL 스토리지 메타데이터를 사용한 설치 배포

31420 단어 빅데이터
1. 클러스터 계획
본고의 선행 기초인 Hadoop 설치 배치는 이전의 Hadoop 집단을 참조하여 만든 블로그입니다. CentOS7 환경에서 Hadoop3 NameNode Resource Manager HA 집단 구축은 현재 NameNode 1 노드에 Hive를 설치하고 배치합니다. 2대의 서버를 추가하여 MySQL 데이터베이스를 Hive의 메타데이터로 저장하는 데이터베이스 서버를 설치하고 나머지는 변하지 않습니다.
IP
HostName
용도
소프트웨어 설치
192.168.100.131
lzjnn1
NameNode1
hadoop,hive
192.168.100.161
lzjmysql1
MySQL 마스터 데이터베이스
mysql-server
192.168.100.162
lzjmysql2
MySQL 데이터베이스
mysql-server
2. MySQL 설치 구성
MySQL 데이터베이스 서비스의 설치는 여기에 쓰지 않고 중요한 설정을 주로 씁니다.여기는 mysql-community-server-5.7.24 버전,rpm 패키지 설치 방식을 사용합니다.
2.1 주종동기식 구성
1. 메인 MySQL 서버에서 수정/etc/my.cnf 파일, [mysqld]의 새 내용:
server-id=1
log-bin=master-bin
log-bin-index=master-bin.index

character-set-server=utf8

2. MySQL 서버에서/etc/my를 수정합니다.cnf 파일, [mysqld]의 새 내용:
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin 

character-set-server=utf8

3. 주 MySQL 데이터베이스 서비스를 시작하고 루트 사용자를 사용하여 본 컴퓨터의 데이터베이스를 연결한다.
#  mysql  
service mysqld start

#    mysql  
#  root             , mysql     /var/log/mysqld.log      
mysql -uroot -p

#  mysql    ,    repl      
mysql>create user repl;
mysql>grant replication slave on *.* to 'repl'@'192.168.0.%' identified by 'XXXXXXXX';

#   MySQL binlog      ,    File、Position  
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000003 |   580013 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

3. MySQL 데이터베이스 서비스를 시작하고 루트 사용자를 사용하여 본 컴퓨터의 데이터베이스를 연결한다.
#  mysql  
service mysqld start

#    mysql  
#  root             , mysql     /var/log/mysqld.log      
mysql -uroot -p

#  slave
mysql> stop slave;

#         
# master_host/master_port       IP   
# master_user/master_password                    
# master_log_file/master_log_pos    show master status     
mysql> change master to master_host='192.168.100.148', 
master_port=3306,
master_user='repl',
master_password='XXXXXXXX', 
master_log_file='master-bin.000003',
master_log_pos=580013;

#  slave
mysql> start slave;

#      ,  Slave_IO_State: Waiting for master to send event   
mysql> show slave status\G;

2.2 Hive에 사용되는 라이브러리 만들기
주 서버에 하이브 데이터베이스와 하이브 사용자 만들기
mysql> create database hive;
mysql> grant all privileges on hive.* to 'hive'@'%' identified by 'XXXXXXXX';

3. Hive 설치 구성
모든 서버에 jdk 설정을 설치해야 합니다
3.1 다운로드
Hive 홈페이지에 들어가서 다운로드 페이지 링크를 다운로드하고apache-hive-2.3.4-bin을 선택하세요.tar.gz 다운로드
3.2 설치
# /usr/local     hive  
mkdir /usr/local/hive

#     jdk       
cp /download/path/apache-hive-2.3.4-bin.tar.gz /usr/local/hive

#cd          
tar zxvf apache-hive-2.3.4-bin.tar.gz

2.3 구성
1./etc/profile.d 디렉토리에서 hadoop을 수정합니다.sh 파일, 다음을 추가합니다.
# for hive
export HIVE_HOME=/usr/local/hive/apache-hive-2.3.4-bin
export HIVE_CONF_DIR=$HIVE_HOME/conf
export HIVE_AUX_JARS_PATH=$HIVE_HOME/lib/*

2、수정 $HIVEHOME/conf/hive-site 파일의 구성은 다음과 같습니다.
<configuration>
  <property>
    <name>hive.metastore.warehouse.dirname>
    <value>/app/hive/warehousevalue>
  property>
  <property>
    <name>system:java.io.tmpdirname>
    <value>/app/hive/iotmpvalue>
  property>
  <property>
    <name>javax.jdo.option.ConnectionURLname>
    <value>jdbc:mysql://192.168.100.161:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=falsevalue>
  property>
  <property>
    <name>javax.jdo.option.ConnectionDriverNamename>
    <value>com.mysql.cj.jdbc.Drivervalue>
  property>
  <property>
    <name>javax.jdo.option.ConnectionUserNamename>
    <value>hivevalue>
  property>
  <property>
    <name>javax.jdo.option.ConnectionPasswordname>
    <value>XXXXXXXXvalue>
  property>

  <property>
    <name>hive.metastore.urisname>
    <value>thrift://lzjnn1:9083value>
  property>
  
  <property>
    <name>hive.exec.dynamic.partition.modename>
    <value>nonstrictvalue>
  property>
configuration>

3. 로그 파일 디렉터리 수정(변경 없이 생략): $HIVE 수정HOME/conf/hive-log4j2.properties 파일, 로그 디렉토리 구성이 다음과 같이 변경되었습니다.
property.hive.log.dir = /app/logs/hive

4.hive의 메타 데이터베이스 초기화
$HIVE_HOME/bin/schematool -dbType mysql -initSchema;

5, mysql에서 Hive 라이브러리에 있는 테이블의 일부 필드 문자 집합 설정을 수정하고 Hive에 설정된 중국어 주석이 부호화되지 않도록 합니다 (중요합니다!!)hive 사용자를 사용하여 mysql 서비스의 명령줄에 로그인하고 다음 명령을 실행합니다
#  hive            utf8:
mysql> alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
mysql> alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
mysql> alter table PARTITION_PARAMS modify column PARAM_VALUE?varchar(4000) character set utf8 ;
mysql> alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
mysql> alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

2.4 시동
1. 먼저 metastore 서비스를 시작합니다.
nohup $HIVE_HOME/bin/hive --service metastore >/dev/null 2>&1 &

2, 다시 시작 hiveserver2 서비스
nohup $HIVE_HOME/bin/hive --service hiveserver2 >/dev/null 2>&1 &

3. 연결 테스트, beeline 도구로 테스트
$HIVE_HOME/bin/beeline

#     hive
#          ,   hive   hadoop     ,     hadoop,    
beeline> !connect jdbc:hive2://localhost:10000/default
Connecting to jdbc:hive2://localhost:10000/default
Enter username for jdbc:hive2://localhost:10000/default: hadoop
Enter password for jdbc:hive2://localhost:10000/default: 
Connected to: Apache Hive (version 2.3.4)
Driver: Hive JDBC (version 2.3.4)
Transaction isolation: TRANSACTION_REPEATABLE_READ

#        test1
0: jdbc:hive2://localhost:10000/default> create database test1;
No rows affected (1.11 seconds)

#      test1
0: jdbc:hive2://localhost:10000/default> use test1;
No rows affected (0.114 seconds)

#     
0: jdbc:hive2://localhost:10000/default> create table testa(
. . . . . . . . . . . . . . . . . . . .>    ORDER_ID int comment '  ID',
. . . . . . . . . . . . . . . . . . . .>    DEALER_ID int comment '  ID',
. . . . . . . . . . . . . . . . . . . .>    CUST_ID int comment '  ID'
. . . . . . . . . . . . . . . . . . . .> );
No rows affected (0.482 seconds)

#   
0: jdbc:hive2://localhost:10000/default> show tables;
+-----------+
| tab_name  |
+-----------+
| testa     |
+-----------+
1 row selected (0.109 seconds)

#       
0: jdbc:hive2://localhost:10000/default> show create table testa;
+----------------------------------------------------+
|                   createtab_stmt                   |
+----------------------------------------------------+
| CREATE TABLE `testa`(                              |
|   `order_id` int COMMENT '  ID',                   |
|   `dealer_id` int COMMENT '  ID',                  |
|   `cust_id` int COMMENT '  ID')                    |
| ROW FORMAT SERDE                                   |
|   'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'  |
| STORED AS INPUTFORMAT                              |
|   'org.apache.hadoop.mapred.TextInputFormat'       |
| OUTPUTFORMAT                                       |
|   'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' |
| LOCATION                                           |
|   'hdfs://lzjcluster/app/hive/warehouse/test1.db/testa' |
| TBLPROPERTIES (                                    |
|   'transient_lastDdlTime'='1545731518')            |
+----------------------------------------------------+
14 rows selected (0.17 seconds)

#      
0: jdbc:hive2://localhost:10000/default> insert into testa values(1,2,3);
WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
No rows affected (17.425 seconds)

#    
0: jdbc:hive2://localhost:10000/default> select * from testa;
+-----------------+------------------+----------------+
| testa.order_id  | testa.dealer_id  | testa.cust_id  |
+-----------------+------------------+----------------+
| 1               | 2                | 3              |
+-----------------+------------------+----------------+
1 row selected (0.318 seconds)

#     
0: jdbc:hive2://localhost:10000/default> drop database test1 cascade;
No rows affected (1.539 seconds)

4、이상 상황은 Hive를 연결하는 과정에서 기록되며 처음에는 오류를 보고할 수 있습니다.
Error: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000/default: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: hadoop is not allowed to impersonate hadoop (state=08S01,code=0)

이것은 사용자 Hadoop 권한이 부족하기 때문에 $Hadoop 을 수정해야 합니다HOME/etc/hadoop/core-site.xml 파일, 다음을 추가합니다.
<property>
  <name>hadoop.proxyuser.hadoop.hostsname>
  <value>*value>
property>
<property>
  <name>hadoop.proxyuser.hadoop.groupsname>
  <value>hadoopvalue>
property>

이후 Hadoop 서비스를 다시 시작하면 이상 해결

좋은 웹페이지 즐겨찾기