第一章 Ambari二次开发之环境搭建

1、linux环境设置

1.1、关闭防火墙

# 关闭防火墙
systemctl stop firewalld
# 开机时禁止启动防火墙
systemctl disable firewalld
# 查看防火墙状态
systemctl status firewalld

1.2、关闭SELINUX

  • 注意:永久关闭
vi /etc/selinux/config
# 将 SELINUX=enforcing  改成 SELINUX=disabled,重启生效

在这里插入图片描述

1.3、安装NPM依赖包

(1)安装node.js

# 下载/usr/lib目录下执行
wget https://nodejs.org/dist/v4.5.0/node-v4.5.0-linux-x64.tar.gz

# 解压
tar zxvf node-v4.5.0-linux-x64.tar.gz

(2)配置环境变量

# 配置环境变量
vi /etc/profile

#添加如下内容
export NODE_HOME="/usr/lib/node-v8.5.0-linux-x64"
export PATH=$PATH:$NODE_HOME/bin

# 使修改后的文件生效
source /etc/profile

(3)查看安装情况

node -v
npm -v 
  • 安装结果

在这里插入图片描述

(4)安装brunch依赖

# 切换目录
# 该命令需要等待较长时间,请确认网络状况良好
# npm install
# 安装brunch
npm install -g brunch@1.7.20
# 验证brunch
brunch -V

在这里插入图片描述

(5)安装bower依赖

yum -y install gcc-c++

yum install python-devel

yum install git

(6)安装rpm-build

yum install rpm-build
rpm-build -V

(7)安装gulp

npm install -g bower
npm install -g gulp

(8)安装phantomjs

  • 安装包下载
https://phantomjs.org/download.html
  • 安装步骤
#第一步: 解压
tar  -jxvf  phantomjs-2.1.1-linux-x86_64.tar.bz2 /opt

#第二步: 创建软连接
ln -sf /usr/local/phantomjs/bin/phantomjs /usr/local/bin/phantomjs

#第三步: 查看安装版本
phantomjs --version

1.4、安装Maven依赖

(1)下载Maven安装包

https://archive.apache.org/dist/maven/maven-3/3.5.2/binaries/

(2)上传并解压

tar -zxvf apache-maven-3.6.0-bin.tar.gz -C /opt

(3)配置国内镜像

vim /etc/maven/settings.xml

<localRepository>/opt/localrepo</localRepository>

<mirrors>
    ......

    <mirror>  
        <id>nexus-aliyun</id>  
        <mirrorOf>central</mirrorOf>    
        <name>Nexus aliyun</name>              <url>http://maven.aliyun.com/nexus/content/groups/public</url>  
    </mirror>
</mirrors>

(4)配置相关镜像

sudo vim /etc/profile #编辑环境变量,加入以下两句
export MVN_HOME=/opt/maven
export PATH=${MVN_HOME}/bin:$PATH
 
source /etc/profile

(5)验证配置结果

mvn -version
  • 验证结果

在这里插入图片描述

2、使用SAMBA建立共享连接

2.1、安装启动SAMBA

(1)yum安装samba

# 检查samba是否安装
rpm -qa | grep samba
# 安装samba
yum install samba
# 重启samba
/bin/systemctl restart smb.service
# 查看smbd服务
ps -ef | grep smb

(2)创建smb用户

# 创建samba用户
useradd samba
# smbpasswd -a 是添加用户的意思 后面跟的是用户名,此用户名一定要跟linux登录用户名一样
smbpasswd -a samba #输入密码,完成即可
2.2、配置共享文件夹
  • 注意事项:修改/etc/samba/smb.conf,在最后加入想要共享的文件夹
    • 配置路径:MyShare文件夹为ambari源码路径的父路径,源码路径为:/opt/ambari/apache-ambari-2.7.6-src
vi /etc/samba/smb.conf

#修改内容如下
[samba home]
    path = /home/samba
    writeable = yes
    guest ok = yes
    read only = no

[MyShare]
        path = /opt/ambari/
        public = yes
        writeable = yes
        guest ok = yes
        read only = no
        browseable = yes
  • 设置完毕之后需要重启samba
# 重启samba
/bin/systemctl restart smb.service

/bin/systemctl restart nmb.service
  • 查看smbd进程和nmbd进程的状态
service smb  status 

service nmb status
  • 运行结果

在这里插入图片描述

2.3、修改文件权限

# 将[MyShare]配置的path目录归属设置为root
chown -R root. /opt/ambari 
# 赋予所有用户对该目录增删改的权限
chmod -R 777 /opt/ambari 

2.4、本地访问共享文件

(1)在windows本地电脑浏览器中输入\ip地址,访问samba目录

\\192.168.6.102
  • 启动windows功能

在这里插入图片描述

  • 网络凭据用户名密码见上
用户名:samba
密码:123456
  • 访问结果如下

!](https://img-blog.csdnimg.cn/4a5b0e06dbee403da9d3b576500808bd.png)

(2)配置网络映射

  • 网络映射配置:X:

在这里插入图片描述

2.5、IDE导入共享文件夹中ambari项目

  • 共享文件建立:以idea为例File->Open,选择上一步映射的网络驱动器盘导入,则建立了idea–>linux的映射

在这里插入图片描述

3、ambari整体编译

3.1、编译过程

(1)上传Maven依赖到linux本地库上

  • Maven依赖库地址
链接:https://pan.baidu.com/s/1kiqPX8pEZ3AB5w9Q9l5fmw 
提取码:r1vi 
  • 上传文件到mven的本地库
rz repository.tar.gz  (linux文件的本地库)

在这里插入图片描述

(2)切换到源码根目录下

cd /opt/ambari/apache-ambari-2.7.6-src

#编译命令
mvn -B clean install rpm:rpm -DnewVersion=2.7.6.0.0 -DbuildNumber=388e072381e71c7755673b7743531c03a4d61be8 -DskipTests -Dpython.ver="python >= 2.7" -Drat.skip=true

3.2、编译问题

(1)编译问题

①问题现象

[INFO] [2/4] Fetching packages...
[ERROR] warning fsevents@2.3.2: The platform "linux" is incompatible with this module.
[INFO] info "fsevents@2.3.2" is an optional dependency and failed compatibility check. Excluding it from installation.[INFO] [3/4] Linking dependencies...
[INFO] [4/4] Building fresh packages...
[INFO] info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
[ERROR] error /root/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/phantomjs: Command failed.
[ERROR] Exit code: 1
[ERROR] Command: sh
[ERROR] Arguments: -c node install.js
[ERROR] Directory: /root/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/phantomjs
[ERROR] Output:
[ERROR] PhantomJS not found on PATH
[ERROR] Download already available at /tmp/npm_config_tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
[ERROR] Verified checksum of previously downloaded file
[ERROR] Extracting tar contents (via spawned process)
[ERROR] Removing /root/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/phantomjs/lib/phantom
[ERROR] Copying extracted folder /tmp/npm_config_tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1639887716005/phantomjs-2.1.1-linux-x86_64 -> /root/ambari/ambari-admin/src/main/resources/ui/admin-web/node_modules/phantomjs/lib/phantom
[ERROR] Install exited unexpectedly
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Ambari Main 2.7.6.0.0 .............................. SUCCESS [  3.717 s]
[INFO] Apache Ambari Project POM 2.7.6.0.0 ................ SUCCESS [  0.195 s]
[INFO] Ambari Web 2.7.6.0.0 ............................... SUCCESS [01:43 min]
[INFO] Ambari Views 2.7.6.0.0 ............................. SUCCESS [  6.583 s]
[INFO] Ambari Admin View 2.7.6.0.0 ........................ FAILURE [ 47.472 s]
[INFO] ambari-utility 1.0.0.0-SNAPSHOT .................... SKIPPED

②解决方式一

cp /tmp/npm_config_tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1639887716005/phantomjs-2.1.1-linux-x86_64  /root/ambari/ambariadmin/src/main/resources/ui/admin-web/node_modules/phantomjs/lib/phantom
  • 文件列表

在这里插入图片描述

③安装phantomjs

在这里插入图片描述

https://phantomjs.org/download.html
  • 安装步骤
#第一步: 解压
tar  -jxvf  phantomjs-2.1.1-linux-x86_64.tar.bz2 /opt

#第二步: 创建软连接
ln -sf /usr/local/phantomjs/bin/phantomjs /usr/local/bin/phantomjs

#第三步: 查看安装版本
phantomjs --version

编译失败:个人将ambari-admin(包括子目录ambari-admin/src/main/resources/ui/admin-web)里面生成的node、node_modules、package-lock.json删除,保持干净的源码环境,再单独编译ambari-admin

(1)问题一

  • 报错日志
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (Bower install) on project ambari-admin: Command execution failed. Process exited with an error: 1 (Exit value: 1) -> [Help 1]

在这里插入图片描述

  • 解决方案

①在上述目录下,安装npm依赖包,全局安装gulp、bower

cd /opt/ambari/apache-ambari-2.7.6-src/ambari-admin/src/main/resources/ui/admin-web/

npm install
npm install -g bower
npm install -g gulp
  • 注意事项:安装phantomjs

在这里插入图片描述

https://phantomjs.org/download.html
  • 安装步骤
#第一步: 解压
tar  -jxvf  phantomjs-2.1.1-linux-x86_64.tar.bz2 /opt

#第二步: 创建软连接
ln -sf /usr/local/phantomjs/bin/phantomjs /usr/local/bin/phantomjs

#第三步: 查看安装版本
phantomjs --version

②在安装bower的依赖包(个人在ambari-admin/src/main/resources/ui/admin-web/下执行)

#安装
bower install

#初始化
bower init
  • 注意事项:由于git被墙导致bower install命令失败,个人将之前成功编译的bower_components目录(ambari-admin/src/main/resources/ui/admin-web/app目录下)拷贝到ambari-release-2.6.1/ambari-admin/src/main/resources/ui/admin-web/app目录下,再次运行成功
find / -name bower_components

③安装 gulp-webserver

npm install gulp-webserver --save-dev

④单独编译

运行命令重新单独编译ambari-admin模块(此命令在ambari-admin目录下运行)

mvn install -Drat.skip=true -Preplaceurl -X

4、ambari-web单独编译

4.1、创建软链接

cd /usr/lib/ambari-server
# 备份web
mv web web.bak
# 创建软链接
ln -s /opt/ambari/apache-ambari-2.7.6-src/ambari-web/public web
  • 软链结果

在这里插入图片描述

4.2、实时监控编译

(1)监控编译

#安装依赖
npm install --unsafe-perm

# 编译
brunch build
  • 运行结果

在这里插入图片描述

(2)实时监控编译

cd /opt/ambari/apache-ambari-2.7.6-src/ambari-web

# 实时监控编译
brunch watch
  • 运行结果

在这里插入图片描述

  • 注意事项:通过此步骤修改ambari-web中的源码,brunch都会在后台将变化同步到ambari-web/public。由于使用了软链接,这些变化也会自动被Ambari Server获取到。

(3)重启ambari-server

ambari-server restart
  • IDEA上修改代码,界面上查看代码修改效果
http://192.168.6.102:3333/#/login
  • 运行结果:显示test mode

在这里插入图片描述

5、ambari-admin模板源码编译

5.1、修改.bowerrc配置

cd /opt/ambari/apache-ambari-2.7.6-src/ambari-admin/src/main/resources/ui/admin-web/

#查看隐藏文件
ls -a  

vim .bowerrc
  • 修改配置如下
#添加如下内容
# 说明:添加一行"allow_root": true 允许以root用户执行bower命令。也可以在执行命令的时候通过参数设定 如:bower install –allow-root 
{
    "directory": "app/bower_components",
    "allow_root": true
}

5.2、安装依赖包

#安装npm依赖包,全局安装gulp、bower
#npm install --unsafe-perm
npm install -g bower
npm install -g gulp

#安装bower的依赖包
bower install

5.2、修改gulpfile.js文件

'use strict';

var gulp = require('gulp');

// load plugins
var $ = require('gulp-load-plugins')();

// add
var webserver = require('gulp-webserver');
var current = "test";
var config = {
    start_task:{
        test:"webserver",
        build:"build"
    }
};

// add
gulp.task('webserver', function(){
    gulp.src('app').pipe(webserver({
        port: 8000,//端口
        host: '172.16.87.154',//域名
        livereload: true,//实时刷新代码。不用f5刷新
        directoryListing: true,
        //fallback:'index.html',
        open:true
    }))
});

gulp.task('styles', function () {
  return gulp.src('app/styles/*.css')
    .pipe($.order([
      'app/styles/main.css',
      'app/styles/custom-admin-ui.css'  
    ], { base: './' }))
    .pipe($.concat('main.css'))
    .pipe($.autoprefixer('last 1 version'))
    .pipe(gulp.dest('.tmp/styles'))
    .pipe($.size());
});

gulp.task('html', ['styles'], function () {
  var jsFilter = $.filter('**/*.js');
  var cssFilter = $.filter('**/*.css');

  return gulp.src('app/*.html')
    .pipe($.plumber())
    .pipe($.useref.assets({searchPath: '{.tmp,app}'}))
    .pipe(jsFilter)
    .pipe(jsFilter.restore())
    .pipe(cssFilter)
    .pipe(cssFilter.restore())
    .pipe($.useref.restore())
    .pipe($.useref())
    .pipe(gulp.dest('dist'))
    .pipe($.size());
});

gulp.task('views', function () {
  return gulp.src('app/views/**/*.html')
    .pipe(gulp.dest('dist/views'));
});

//add
gulp.task('xml',function(){
  return gulp.src('app/view.xml')
  .pipe(gulp.dest('dist'))
});

gulp.task('images', function () {
  return gulp.src('app/images/**/*')
    .pipe(gulp.dest('dist/images'))
    .pipe($.size());
});

gulp.task('fonts', function () {
  return $.bowerFiles()
    .pipe($.filter('**/*.{eot,svg,ttf,woff}'))
    .pipe($.flatten())
    .pipe(gulp.dest('dist/fonts'))
    .pipe($.size());
});

gulp.task('extras', function () {
  return gulp.src(['app/*.*', '!app/*.html'], {dot: true})
    .pipe(gulp.dest('dist'));
});

gulp.task('clean', function () {
  return gulp.src(['.tmp', 'dist'], {read: false}).pipe($.clean());
});

//edit
gulp.task('build', ['html', 'views', 'images', 'fonts', 'xml', 'extras']);

//edit
gulp.task('default', ['clean'], function () {
  gulp.start(config.start_task[current]);
});
  • 注意事项:
    • 如果gulpfile.js中的current是’test’,那么访问 http://:8000/index.html 即可进行独立编译开发
    • 如果gulpfile.js中的current是’build’,则需要与ambari的安装程序进行结合使用。(与ambari-web编译的步骤类似)

5.3、启动gulp

#切换目录
cd /opt/ambari/apache-ambari-2.7.6-src/ambari-admin/src/main/resources/ui/admin-web

#安装gulp-webserver
npm install gulp-webserver --save-dev
  • 安装过程较慢,耐心等待

在这里插入图片描述

  • 启动gulp
#启动gulp
gulp
  • 运行结果

在这里插入图片描述

5.4、编译方式

  • gulp提供两种方式编译.
    • webserver:单独启动一个web服务,来测试修改后的ambari-Admin。
    • 编译软链:编译后软链接到ambari-server以真实环境来测试。

(1)方式一 - webserver方式启动

  • 访问界面查看效果
http://192.168.6.102:8000/index.html
  • 访问结果

在这里插入图片描述

(2)方式二 - ambari-server服务真实环境启动

①设置gulpfile.js中的current为’build’,之后重新编译

var current = "build";

#重新编译

gulp
  • 编译结果:生成dist文件

在这里插入图片描述

②建立软链

#第一步: 切换到ambari-service对应的admin页面的目录下
cd  /var/lib/ambari-server/resources/views/work

#第二步: 备份ADMIN_VIEW{2.6.0}
mv ADMIN_VIEW\{2.7.3.0\} ADMIN_VIEW\{2.7.3.0\}_bat

#第三步: 建立软链接
ln -s /opt/ambari/apache-ambari-2.7.6-src/ambari-admin/src/main/resources/ui/admin-web/dist ADMIN_VIEW\{2.7.3.0\}

③复制文件

cd ADMIN_VIEW\{2.7.3.0\}.bak/
# 复制ADMIN_VIEW{2.6.0.0}.bak里的view.xml文件到ADMIN_VIEW{2.6.0.0}

cp view.xml ../ADMIN_VIEW\{2.7.3.0\}


# 复制ADMIN_VIEW{2.6.0.0}.bak里的view.xml文件到/opt/apache-ambari-2.6.0-src/ambari-admin/src/main/resources/ui/admin-web/app

cp view.xml /opt/ambari/apache-ambari-2.7.3-src/ambari-admin/src/main/resources/ui/admin-web/app/

④重启ambari-server

ambari-server restart

⑤查看数据

  • 通过如下网址访问
http://192.168.6.102:3333/#/main/dashboard/metrics
  • 访问结果

在这里插入图片描述

附:常见问题

Ⅰ、虚拟机映射到Windows连接报错:此链接尚未还原

(1)问题如下

在这里插入图片描述

(2)解决方案

①删除已有网络连接

  • 第一步:CMD输入net use显示已访问链接

在这里插入图片描述

  • 第二步:删除所有已访问连接,可以使用命令 net use * /delete
net use \\192.168.6.102\MyShare /delete

在这里插入图片描述

  • 第三步:建立IPC$通道
net use \\192.168.6.102\ipc$ "leidi" /user:"root"

Ⅱ、共享文件网络错误

(1)问题原因

在这里插入图片描述

(2)解决方案 - 修改策略组

Ⅰ、使用Ping检查网络连通性

在这里插入图片描述

Ⅱ、按WIN+R组合键调出运行, 输入gpedit.msc,调出本地组策略编辑器。

在这里插入图片描述

Ⅲ、定位到“计算机配置-管理模板-网络-Lanman工作站”,在右侧内容区可以看到“启用不安全的来宾登录”,其状态是“未配置”。

在这里插入图片描述

Ⅳ、双击"启用不安全的来宾登录",将其状态修改为”已启用“,单机”应用“后确定。
在这里插入图片描述

(3)解决方案 - 修改注册表

  • 第一步:regedit启动
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters

在这里插入图片描述

  • 第二步: “Parameters” -> 右键 -> 新建(N)-> DWORD (32位) 值 ,新增"AllowInsecureGuestAuth"设置为1

在这里插入图片描述

Ⅲ、NFS实现linux和windows之间共享文件

第一步: Windows开启

(1)安装nfs服务

rpm -qa nfs-utils rpcbind

yum -y install nfs-utils rpcbind

(2)配置文件

vi /etc/exports

#共享文件设置
/opt/ambari 192.168.32.1(rw,sync,no_root_squash)
  • 配置结果如下

在这里插入图片描述

/home/jiang是你要共享的目录

*是通配所有的nfs客户端ip

rw是可读可写

sync是同时将数据写入到内存与硬盘中,保证不丢失数据

no_root_squash是当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员

(3)为rpcbind和nfs做开机启动

systemctl enable rpcbind.service    
systemctl enable nfs-server.service  

(4)分别启动rpcbind和nfs服务

systemctl start rpcbind.service    
systemctl start nfs-server.service 

(5)查看共享出来的目录

showmount -e localhost

第二步:windows开启nfs服务

(1)开启NFS服务

在这里插入图片描述

  • 注意事项:windows一定是专业版的

(2)磁盘映射永久存在

net use /persistent:yes

(3)连接IP地址

showmount -e 192.168.6.102(linux的ip地址)
  • 运行结果

在这里插入图片描述

(4)挂载NFS磁盘,输入NFS服务器的用户名密码,NFS导出的目录,及挂载在本地用哪个盘符

mount \\192.168.6.102\opt\ambari z:
  • 运行结果

在这里插入图片描述

(5)配置网络映射

在这里插入图片描述

Ⅳ、关于端口不通

  • 问题现象:电脑重启后window连接虚拟机端口不通

  • 解决方案

iptables -F

iptables -save
  • 运行结果

在这里插入图片描述

Ⅴ、HDFS文件块丢失 & 不满足安全模式

  • 问题描述如下
Replicated Blocks:
 Total size:    1999613239 B
 Total files:   503 (Files currently being written: 4)
 Total blocks (validated):      384 (avg. block size 5207326 B) (Total open file blocks (not validated): 2)
  ********************************
  UNDER MIN REPL'D BLOCKS:      2 (0.5208333 %)
  MINIMAL BLOCK REPLICATION:    1
  CORRUPT FILES:        2
  CORRUPT BLOCKS:       2
  CORRUPT SIZE:         78 B
  ********************************
 Minimally replicated blocks:   382 (99.479164 %)
 Over-replicated blocks:        0 (0.0 %)
 Under-replicated blocks:       382 (99.479164 %)
 Mis-replicated blocks:         0 (0.0 %)
 Default replication factor:    3
 Average block replication:     0.9947917
 Missing blocks:                0
 Corrupt blocks:                2
 Missing replicas:              764 (66.31944 %)
  • 解决方案

(1) 删除坏掉的块:CORRUPT BLOCKS。

(2)XXXXXX

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随缘清风殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值