华为云集群部署踩坑指南。

玩数据就要天天和服务器各种集群打交道,对于Linux一窍不通的我真的,我太难了。之前的测试用的集群挂了之后要切换到其他集群上,公司买的华为云,然后就开始了新的踩坑之路。

  • 1 提申请

首先我们用任何环境都要去提申请了啦,提了申请才会分配资源,账号之类的。

  • 2 hadoop集群使用指南
    1)客户端IP 用户名 密码,在Xshell客户端里打开new一个session进行连接。
    使用远程连接工具(xshell)连接IP:XX.XX.XX.XX 端口:22
    用户名:XXXXXXXXX
    密码:XXXXXXXX
    连接好之后,在客户端执行命令,加载环境变量。直接执行以下两行命令:
    source /opt/hadoop_client/bigdata_env
    kinit -kt /DW_PRG/LF06/etc/user.keytab [email protected]
    2)web管理界面,华为云的web管理界面,根据链接进去,用户名密码登录,密码是不能被记住的,而且几分钟不用就自动断开连接了。
    3)Hadoop应用用户,用户名和客户端用户名一样的,这里找到keytab和krb5文件。在cd IP:DW_PRG/LF0X/etc 里面。

重点来了,比如我现在有一个Java项目,需要连接Hadoop集群,下文重点。

  1. 新建项目
    IDEA里面 new一个新的project,我这里new的是gradle项目.华为云集群部署踩坑指南。_第1张图片
    找到src-> main->resource 要把这四个文件添加进去,其中krb5.conf和user.keytab两个文件cd /DW_PRG/LF0X/etc下面,把这两个文件下载到本地。
    hdfs-sitr.xml 和core-site.xml在 cd /opt/hadoop_client/HDFS/hadoop/etc/hadoop下面,把这两个文件下载到本地。然后把这四个文件拖进去放在项目的resource文件夹里。
  2. 新建KerberosTest 测试类,这个测试类是通用的Java连接测试类,可以搜到代码,不然找用户手册。
import java.io.IOException;
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 org.apache.hadoop.security.UserGroupInformation;

public class KerberosTest {    
private static String PATH_TO_HDFS_SITE_XML = KerberosTest.class.getClassLoader().getResource("hdfs-site.xml")            .getPath();    
private static String PATH_TO_CORE_SITE_XML = KerberosTest.class.getClassLoader().getResource("core-site.xml")            .getPath();    
private static String PATH_TO_KEYTAB =KerberosTest.class.getClassLoader().getResource("user.keytab").getPath();    
private static String PATH_TO_KRB5_CONF = KerberosTest.class.getClassLoader().getResource("krb5.conf").getPath();    
private static String PRNCIPAL_NAME = "CORPLF06EMLTRS";    
private FileSystem fs;    
private Configuration conf;
    
/**     
* initialize Configuration     
*/    
private void initConf() {        
conf = new Configuration();        
// add configuration files        
conf.addResource(new Path(PATH_TO_HDFS_SITE_XML));        
conf.addResource(new Path(PATH_TO_CORE_SITE_XML));    
}  
  
/**     
* login Kerberos to get TGT, if the cluster is in security mode     
* * @throws IOException if login is failed     
*/    
private void login() throws IOException {        
// not security mode, just return        
if (! "kerberos".equalsIgnoreCase(conf.get("hadoop.security.authentication"))) {            
return;        
}        
//security mode        
System.setProperty("java.security.krb5.conf", PATH_TO_KRB5_CONF); 
UserGroupInformation.setConfiguration(conf);  
UserGroupInformation.loginUserFromKeytab(PRNCIPAL_NAME, PATH_TO_KEYTAB);    
}    

/**     
* initialize FileSystem, and get ST from Kerberos     
* * @throws IOException     
 */    
private void initFileSystem() throws IOException {       
 fs = FileSystem.get(conf);    
 }    
 
 /**     
 * An example to access the HDFS     
 * * @throws IOException    
  */    
 private void doSth() throws IOException {        
 Path path = new Path("/tmp");        
 FileStatus fStatus = fs.getFileStatus(path);        
 System.out.println("Status of " + path + " is " + fStatus);        
 //other thing    
}    

public static void main(String[] args) throws Exception {        
KerberosTest test = new KerberosTest();        
test.initConf();        
test.login();        
test.initFileSystem();        
test.doSth();    
}
}
  1. build.gradle文件配置 ,这是比较坑的,因为华为云集群改动了原来apache自带的Hadoop各种jar包,所以在gradle里不能直接加apache的Hadoop依赖,要不然那个测试类一直报错,连不上!!!
  2. 先问公司的大佬,公司的仓库有没有加华为云专有的Hadoop集群各种jar包,按理来说既然公司租用了它的服务器,这些东西肯定在公司远程仓库里是➕进去了的。找到公司的maven仓库地址,然后在里面搜索hadoop,附加条件那里输入third,把第三方的包全选上,会搜索出一堆第三方jar包出来。
    华为云集群部署踩坑指南。_第2张图片
    按照这种方式搜索,把需要的包找到,点?view看?它对应的.pom文件,有配置方法。
    要在build.gradle里先把
    //mavenCentral() 注释掉
    把公司的仓库地址加进去。
    在dependency加这些引用包的依赖进去。华为云集群部署踩坑指南。_第3张图片
    把这些包import进去后,跑一下看看,又碰到问题,
    java.net.UnknownHostException: null: unknown error
    没有找到请求地址的问题。很简单,我开发环境IDEA是在Windows10系统下进行的开发,打开计算机C盘找到Windows->System32->drivers->etc->hosts.txt文件(C:\Windows\System32\drivers\etc\hosts.txt),用文本编辑器打开文件,在末尾加上华为云HDFS的Namenode IP和主机名。如:
    #华为云集群HDFS的Namenode主机名
    99.12.21.109 dy-hdp-d090
    5
    跑起来这样就好了。

你可能感兴趣的:(Hadoop与Spark)