javascp文件夾
1. hadoop分布式部署(轉載)--賊靠譜
原文地址:https://blog.csdn.net/sjmz30071360/article/details/79889055
1. 集群搭建形式
Hadoop環境搭建分為三種形式:單機模式、偽分布式模式、完全分布模式
單機模式—— 在一台單機上運行,沒有分布式文件系統,而是直接讀寫本地操作系統的文件系統。
偽分布式—— 也是在一台單機上運行,但不同的是java進程模仿分布式運行中的各類節點。即一台機器上,既當NameNode,又當DataNode,或者說既是JobTracker又是TaskTracker。沒有所謂的在多台機器上進行真正的分布式計算,故稱為「偽分布式」。
完全分布式—— 真正的分布式,由3個及以上的實體機或者虛擬機組成的機群。一個Hadoop集群環境中,NameNode,SecondaryName和DataNode是需要分配在不同的節點上,也就需要三台伺服器。
前兩種模式一般用在開發或測試環境下,生產環境下都是搭建完全分布式模式。
從分布式存儲的角度來說,集群中的節點由一個NameNode和若干個DataNode組成,另有一個SecondaryNameNode作為NameNode的備份。
從分布式應用的角度來說,集群中的節點由一個JobTracker和若干個TaskTracker組成。JobTracker負責任務的調度,TaskTracker負責並行執行任務。TaskTracker必須運行在DataNode上,這樣便於數據的本地計算。JobTracker和NameNode則無須在同一台機器上。
2. 環境
操作系統:CentOS7(紅帽開源版)
機器:虛擬機3台,(master 192.168.0.104, slave1 192.168.0.102, slave2 192.168.0.101)
JDK:1.8(jdk-8u162-linux-x64.tar)
Hadoop:2.9.0(http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz)
3. 搭建步驟
3.1 每台機器安裝&配置JDK(1台做好後,克隆出其它機器)
1) 創建目錄 mkdir /usr/java
2) 上傳jdk安裝包到 /usr/java/
3) 解壓 tar -xvf jdk-8u162-linux-x64.tar
4) 追加環境變數 vi /etc/profile
5) 使環境變數生效 source /etc/profile
6) 檢測jdk正確安裝 java -version
3.2 修改每台機器主機名(hostname)
hostnamectl set-hostname master (立即生效)
hostnamectl set-hostname slave1 (立即生效)
hostnamectl set-hostname slave2 (立即生效)
確認修改
3.3 修改每台機器/etc/hosts文件
vi /etc/hosts
修改其中1台,然後scp到其它機器
scp 文件名 遠程主機用戶名@遠程主機名或ip:存放路徑
scp hosts [email protected]:/etc/
scp hosts [email protected]:/etc/
修改完之後,互ping其它機器,能互ping則說明修改OK
ping -c 3 slave1 (※ 3表示發送 3 個數據包)
3.4 配置ssh,實現無密碼登錄
無密碼登錄,效果也就是在master上,通過ssh slave1或者ssh slave2就可以登錄對方機器,而不用輸入密碼。
1) 每台機器執行ssh-keygen -t rsa,接下來一路回車即可
執行ssh-keygen -t rsa主要是生成 密鑰 和 密鑰的存放路徑
我們用的root用戶,公鑰私鑰都會保存在~/.ssh下
2) 在master上將公鑰放到authorized_keys里,命令:cat id_rsa.pub > authorized_keys
3) 將master上的authorized_keys放到其它機器上
scp authorized_keys root@slave1:~/.ssh/
scp authorized_keys root@slave2:~/.ssh/
4) 測試是否成功
3.5 上傳&配置hadoop(配置完master後,將/usr/hadoop/整個目錄內容到其它機器)
1) 創建目錄 mkdir /usr/hadoop
2) 上傳hadoop安裝包hadoop-2.9.0.tar.gz到 /usr/hadoop/
3) 解壓 tar -xvf hadoop-2.9.0.tar.gz
4) 追加環境變數 vi /etc/profile(其它機器也要相應配置一次hadoop環境變數)
5) 使環境變數生效 source /etc/profile
6) 確認環境變數配置OK
7) 創建HDFS存儲目錄
cd /usr/hadoop
mkdir hdfs
cd hdfs
mkdir name data tmp
/usr/hadoop/hdfs/name --存儲namenode文件
/usr/hadoop/hdfs/data --存儲數據
/usr/hadoop/hdfs/tmp --存儲臨時文件
8) 修改/usr/hadoop/hadoop-2.9.0/etc/hadoop/hadoop-env.sh文件,設置JAVA_HOME為實際路徑
否則啟動集群時,會提示路徑找不到
9) 修改/usr/hadoop/hadoop-2.9.0/etc/hadoop/yarn-env.sh文件,設置JAVA_HOME為實際路徑
10) 配置/usr/hadoop/hadoop-2.9.0/etc/hadoop/core-site.xml
增加hadoop.tmp.dir 和 fs.default.name
11) 配置/usr/hadoop/hadoop-2.9.0/etc/hadoop/hdfs-site.xml
dfs.replication:默認值3
dfs.permissions:默認值為true,設置為true有時候會遇到數據因為許可權訪問不了;設置為false可以不要檢查許可權就生成dfs上的文件
12) 配置/usr/hadoop/hadoop-2.9.0/etc/hadoop/mapred-site.xml
cd /usr/hadoop/hadoop-2.9.0/etc/hadoop
cp mapred-site.xml.template mapred-site.xml
maprece.framework.name:指定maprece運行在yarn平台,默認為local
13) 配置/usr/hadoop/hadoop-2.9.0/etc/hadoop/yarn-site.xml
yarn.resourcemanager.hostname:指定yarn的resourcemanager的地址
yarn.nodemanager.aux-services:recer獲取數據的方式
yarn.nodemanager.vmem-check-enabled:意思是忽略虛擬內存的檢查,如果安裝在虛擬機上,這個配置很有用,配上去之後後續操作不容易出問題。如果是在實體機上,並且內存夠多,可以將這個配置去掉
14) 配置/usr/hadoop/hadoop-2.9.0/etc/hadoop/slaves文件,將裡面的localhost刪除,配置後內容如下:
15) 整個/usr/hadoop/目錄到其它機器
scp -r hadoop root@slave1:/usr/
scp -r hadoop root@slave2:/usr/
3.6 啟動Hadoop
1) 啟動之前需要格式化一下。因為master是namenode,slave1和slave2都是datanode,所以在master上運行
hadoop namenode -format
格式化成功後,可以看到在/usr/hadoop/hdfs/name目錄下多了一個current目錄,而且該目錄下有一系列文件,如下:
2) 執行啟動(namenode只能在master上啟動,因為配置在master上;datanode每個節點上都可以啟動)
執行 start-all.sh
master上執行jps,會看到NameNode, SecondaryNameNode, ResourceManager
其它節點上執行jps,會看到DataNode, NodeManager
3) 在wins上打開網頁,查看HDFS管理頁面 http://192.168.0.104:50070查看,提示無法訪問
在master上,執行以下命令關閉防火牆,即可訪問(為了能夠正常訪問node節點,最好把其它機器的防火牆也stop了)
systemctl stop firewalld.service
HDFS管理首頁
HDFS Datenodes頁
訪問Yarn管理頁: http://192.168.0.104:8088
4)通過主機名也可以訪問的設置
win7為例,需要將以下信息追加到C:\Windows\System32\drivers\etc\hosts文件中
192.168.0.104 master
192.168.0.102 slave1
192.168.0.101 slave2
Over!!!搭建成功!!!
4. 運行實例
cd /usr/hadoop/hadoop-2.9.0/share/hadoop/maprece
hadoop jar hadoop-maprece-examples-2.9.0.jar pi 5 10
。。。。。。
=====================================================
如果不關防火牆,子節點可能出現,輸入jps後只有jps一個進程,或者是缺進程的情況,關閉防火牆就好了。
2. java中jatable連接資料庫步驟及其獲取數據方法
以下是一個小程序,參考下
import javax.swing.*;
import javax.swing.table.JTableHeader;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
public class Test extends JFrame{
// 定義組件
private JScrollPane scpDemo;
private JTableHeader jth;
private JTable tabDemo;
private JButton btnShow;
// 構造方法
public Test(){
// 窗體的相關屬性的定義
super("JTable數據綁定示例");
this.setSize(330,400);
this.setLayout(null);
this.setLocation(100,50);
// 創建組件
this.scpDemo = new JScrollPane();
this.scpDemo.setBounds(10,50,300,270);
this.btnShow = new JButton("顯示數據");
this.btnShow.setBounds(10,10,300,30);
// 給按鈕注冊監聽
this.btnShow.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
btnShow_ActionPerformed(ae);
}
});
// 將組件加入到窗體中
add(this.scpDemo);
add(this.btnShow);
// 顯示窗體
this.setVisible(true);
}
// 點擊按鈕時的事件處理
public void btnShow_ActionPerformed(ActionEvent ae){
// 以下是連接數據源和顯示數據的具體處理方法,請注意下
try{
// 獲得連接
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:localServer","sa","");
// 建立查詢條件
String sql = "select * from localServer";
PreparedStatement pstm = conn.prepareStatement(sql);
// 執行查詢
ResultSet rs = pstm.executeQuery();
// 計算有多少條記錄
int count = 0;
while(rs.next()){
count++;
}
rs = pstm.executeQuery();
// 將查詢獲得的記錄數據,轉換成適合生成JTable的數據形式
Object[][] info = new Object[count][4];
count = 0;
while(rs.next()){
info[count][0] = Integer.valueOf( rs.getInt("id"));
info[count][1] = rs.getString("name");
info[count][2] = Integer.valueOf( rs.getInt("age") );
info[count][3] = rs.getString("sex");
count++;
}
// 定義表頭
String[] title = {"學號","姓名","年齡","性別"};
// 創建JTable
this.tabDemo = new JTable(info,title);
// 顯示表頭
this.jth = this.tabDemo.getTableHeader();
// 將JTable加入到帶滾動條的面板中
this.scpDemo.getViewport().add(tabDemo);
}catch(ClassNotFoundException cnfe){
JOptionPane.showMessageDialog(null,"數據源錯誤","錯誤",JOptionPane.ERROR_MESSAGE);
}catch(SQLException sqle){
JOptionPane.showMessageDialog(null,"數據操作錯誤","錯誤",JOptionPane.ERROR_MESSAGE);
}
}
public static void main(String[] args){
new Test();
}
}
3. java如何跨盤符移動文件夾
java本身是沒有默認命令的,不過可以通過遞歸的方式,遍歷子目錄,實現文件的功能。
另一種方式是 使用 系統命令 windows 可以使用x, linux下 用 mv -R 都可以實現。
4. Java中常用的開發工具有哪些
常用的工具有:
Eclipse 據數據顯示很多Java開發人員的Java開發工具便是Eclipse,這主要得益於Eclipse是一個開源的、可以基於Java的可擴展開發平台。Eclipse本身而言,它只是一個框架和一組服務,但可以通過插件組件構建開發環境。
editplus EditPlus是一款由韓國 Sangil Kim (ES-Computing)開發的編輯器,可以作為C,Java,Php等等語言的一個簡單的IDE。EditPlus擁有無限制的撤消與重做、英文拼字檢查、自動換行、列數標記、搜尋取代、同時編輯多文件、全屏幕瀏覽功能,也是一款常見的Java開發工具。
NetBeans NetBeans提供了功能全面的陣列,如轉換器,編輯器和代碼分析器,使用這些工具可以幫助我們使用的Java技術實現應用程序。NetBeans工具范圍相當廣泛,是一款的Java開發工具。
Junit Junit是一個可以幫助Java開發人員編寫和運行測試的單元測試框架。JUnit和市場上其他類似的框架有著本質的區別。主要表現在你可以一次測試一個代碼塊,而不需要等待該模塊在運行測試前完成。實際上是你可以「先測試,然後寫代碼」
VisualVM VisualVM也是一款使用較多的Java開發工具。它最主要的功能便是可以排查故障,可以使用VisualVM整合多命令行JDK工具。如jvmstat、JMX和Serviceability Agent(SA)中使用VisualVM。VisualVM最出名的是附加了API,以獲得更多的數據,以及自動使用更快捷。
Gradle Gradle是一個自動化項目工具,是建立在Apache Maven和Apache Ant的功能上。雖然Gradle並不是的構建工具(的是Maven,64%的Java開發人員會選擇它),但它的普及速度很快。它同時也可作為默認的Android構建開發工具。
SparkJava SparkJava是一款體形輕巧,功能強大的Web應用框架。Spark可以通過一些繁瑣的XML配置來使用Spark框架編寫應用程序。能讓我們花最少的精力來開發Java的Web應用程序。是一款的Java web開發工具。
Clover Clover主要用於代碼覆蓋,可以幫助用於測試應用程序的代碼。我們可以在IDE或持續集成系統中運行Clover。能夠讓測試的運行速度更快。是Java開發測試必不可少的工具之一。
5. java中如何從文件中讀取數據
1.package txt;
2.
3.import java.io.BufferedReader;
4.import java.io.File;
5.import java.io.FileInputStream;
6.import java.io.InputStreamReader;
7.
8./**
9. * 讀取TXE數據
10. */
11.public class ReadTxtUtils {
12. public static void main(String arg[]) {
13. try {
14. String encoding = "GBK"; // 字元編碼(可解決中文亂碼問題 )
15. File file = new File("c:/aa.txt");
16. if (file.isFile() && file.exists()) {
17. InputStreamReader read = new InputStreamReader(
18. new FileInputStream(file), encoding);
19. BufferedReader bufferedReader = new BufferedReader(read);
20. String lineTXT = null;
21. while ((lineTXT = bufferedReader.readLine()) != null) {
22. System.out.println(lineTXT.toString().trim());
23. }
24. read.close();
25. }else{
26. System.out.println("找不到指定的文件!");
27. }
28. } catch (Exception e) {
29. System.out.println("讀取文件內容操作出錯");
30. e.printStackTrace();
31. }
32. }
33.}
java讀取TXT文件中的數據,每一行就是一個數,返回一個數組,代碼?
?
List list=new ArrayList();
BufferedReader br=new BufferReader(new InputStreamReader(new FileInputStream(new File("in.txt"))));
String str=null;
while((str=br.readLine())!=null)
{
list.add(new Integer(str));
}
Integer[] i=new Integer[list.size()];
list.toArray(i);
TXT文本中如據形如:
123
456
789
讀入二維數組效果為:
temp[0][]={1,2,3};
temp[1][]={4,5,6};
temp[2][]={7,8,9};
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.*;
public class xx{
public static void main(String[]args){
String s;
int[][]save=new int[3][3];
try{
BufferedReader in =new BufferedReader(new FileReader("C:\\txt.txt"));
int i=0;
while((s=in.readLine())!=null){
save[i][0]=Integer.parseInt(s.substring(0,1));
save[i][1]=Integer.parseInt(s.substring(1,2));
save[i][2]=Integer.parseInt(s.substring(2,3));
i++;
}
}
catch(FileNotFoundException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++){
System.out.print(save[i][j]);
}
System.out.println();
}
}
}
或
?
BufferedReader bf=new BufferedReader(new FileReader("Your file"));
String lineContent=null;
int i = 0;
int [][] temp = new int [3][];
while((lineContent=bf.readLine())!=null){
String [] str = lineContent.split("\\d");// 將 lineContent 按數字拆分
for(int j = 0; j < str.length(); j++){
int [i][j] = Integer.parseInt(str[j]);
}
i++;
}
scp|cs|ff|201101
這是d:\\a.txt的數據,與「|」分割取數據出來,保存在變數a;b;c;d里
import java.io.*;
public class Test{
public static void main(String[] args)throws Exception{
String a, b, c, d;
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new FileReader("d:\\a.txt"));
String s = br.readLine();
while(s != null){
sb.append(s);
s = br.readLine();
}
s = sb.toString();
String[] str = s.split("|");
a = str[0];
b = str[0];
c = str[0];
d = str[0];
}
}
6. java 應用程序在linux 上怎麼部署 運行
java 應用程序在linux部署方法:
1,將項目達成war包(用eclipse,項目右鍵--Export--選擇war file)
2,將tomcat(用winSCP當然也可以用secureCRT,用securCRT需要建立sftp(即上傳文件的目錄),用put tomcat命令)考到ilunx對應的目錄下
3,然後將項目的war包放到tomcat的webapps目錄下
4,啟動tomcat(命令:./startup.sh(linux下啟動tomcat是.sh文件而非.bat文件))
遇到問題如下:
運行./startup.sh 是報錯
-bash: ./startup.sh: Permission denied
原因:沒有運行.sh的許可權
解決:chmod 777 *.sh
755 代表用戶對該文件擁有讀,寫,執行的許可權,同組其他人員擁有執行和讀的許可權,沒有寫的許可權,其他用戶的許可權和同組人員許可權一樣。
777代表,user,group ,others ,都有讀寫和可執行許可權。
獲得許可權後再運行./startup.sh命令時報錯:
This file is needed to run this program
原因:該文件需要一個運行環境(即配置jdk環境變數)
解決:JAVA_HOME=/usr/java/jdk1.6.0_25/(當然這個目錄根據自己的jdk安裝目錄)
然後在運行./startup.sh 提示:
Using CATALINA_BASE: /usr/local/sarft/apache/apache-tomcat-6.0.29
Using CATALINA_HOME: /usr/local/sarft/apache/apache-tomcat-6.0.29
Using CATALINA_TMPDIR: /usr/local/sarft/apache/apache-tomcat-6.0.29/temp
Using JRE_HOME: /usr/java/jdk1.6.0_25/
Using CLASSPATH: /usr/local/sarft/apache/apache-tomcat-6.0.29/bin/bootstrap.jar
如果提示以上信息表明 tomcat啟動成功,可以正常run了。
7. 如何用 scp命令創建文件夾 40guofc
調用的是下面的方法 public static int runSSH(String host, String username, String password, String cmd) throws IOException { if (logger.isDebugEnabled()) { logger.debug("running SSH cmd [" + cmd + "]"); } Connection conn = getOpenedConnection(host, username, password); Session sess = conn.openSession(); sess.execCommand(cmd); InputStream stdout = new StreamGobbler(sess.getStdout()); BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); while (true) { // attention: do not comment this block, or you will hit // NullPointerException //空春好 when you are trying to read exit status String line = br.readLine(); if (line == null) break; if (logger.isDebugEnabled()) { logger.debug(line); } } sess.close(); conn.close(); return sess.getExitStatus().intValue(); }
先用ssh建立對方機器的文件夾/a ssh [email protected].*.* mkdir /a 再用scp拷貝 scp /a/b.mp3 [email protected].*.*:/a/b.mp3 ssh 和 scp 都有相應的命令嗎?》我 在上面的方法中執行的是 ssh [email protected].*.* mkdir /a 命令在怎麼也不好用呢
看你的命令是沒啥問題的喲 我在linux里就這么用的 既然要求 那你就用scp了 scp也是很方便的 PS:rsync也可以通過ssh傳輸
ssh [email protected].*.* "@mkdir /a" --------- 這樣也是沒問題的 但是你這個username要有在/下創建文件夾的許可權才可以。
我 是調用 上面的 runSSH() 這個方法 可執行完就沒什麼反應了
引用 7 樓 guofc_presoft 的回復:我 是調用 上面的 runSSH() 這個方法 可執行完就沒什麼反應了 要是能在命令行執行的話 你現在命令行執行試試 你用代碼來操作 萬一是你自己代碼的問題呢斗鉛?
也有許可權啊 郁森悔悶死了 那老大知道如何創建文件夾嗎
恩 我 用其他的方法 public static void scpPut(String host, String username, String password, String localFile, String remoteDir) throws IOException { if (logger.isDebugEnabled()) { logger.debug("spc [" + localFile + "] to " + host + remoteDir); } Connection conn = getOpenedConnection(host, username, password); SCPClient client = new SCPClient(conn); client.put(localFile, remoteDir); conn.close(); } 如這些傳送文件都可以用! 另外 命令行執行 需要在哪裡執行,需要什麼環境嗎?
引用 9 樓 guofc_presoft 的回復:也有許可權啊 郁悶死了 那老大知道如何創建文件夾嗎 scp是會自己建文件夾的呀 我剛剛試了。
但是我調用 scpPut() 這個方法,如果是路徑正確的話就可以COPY過去 如果是沒有文件夾的話就會報錯誤。 Error ring SCP transfer. at ch.ethz.ssh2.SCPClient.put(SCPClient.java:575) at ch.ethz.ssh2.SCPClient.put(SCPClient.java:533) at ch.ethz.ssh2.SCPClient.put(SCPClient.java:394) at jp.co.u_can.manabi.imp.batch.DeliveryInstructionBatch.scpPut(DeliveryInstructionBatch.java:444) at jp.co.u_can.manabi.imp.batch.DeliveryInstructionBatch.execute(DeliveryInstructionBatch.java:366) at jp.co.u_can.manabi.imp.batch.DeliveryInstructionBatch.main(DeliveryInstructionBatch.java:241) Caused by: java.io.IOException: Remote scp terminated with error (scp: /usr/gms/20100915/0002/lst: No such file or directory). at ch.ethz.ssh2.SCPClient.readResponse(SCPClient.java:59) at ch.ethz.ssh2.SCPClient.sendFiles(SCPClient.java:163) at ch.ethz.ssh2.SCPClient.put(SCPClient.java:571) ... 5 more
你在windows下用winscp這個工具 往伺服器上傳文件試試 http://sourceforge.net/projects/winscp/
那你把命令改成 scp -r C:\imart\lst [email protected]:/usr/gms/20100915/0002/ 這樣試試呢?
winscp 這個工具我有,用ROOT用戶登陸後建立文件夾都可以! 不過 我現在做的是BAT 需要自動創建文件夾以及COPY文件
引用 14 樓 steptodream 的回復:那你把命令改成 scp -r C:\imart\lst [email protected]:/usr/gms/20100915/0002/ 這樣試試呢? 這種也不行,調用上面的runSSH方法一點反應都沒有。
難道你這里用 和我linux里還有區別? 我在linux里 /path1/path2/是存在的 scp -r /path/folder root@ip:/path1/path2/ 然後ip機器的/path1/path2/下就會有folder文件夾 即/path1/path2/folder scp -r /path/folder root@ip:/path1/path2/folder 結果同上 scp -r /path/folder root@ip:/path1/path2/test 然後folder下的內容 會在/path1/path2/test/下 也就是說沒產生folder scp -r /path/folder root@ip:/path1/path2/test1/folder 其中test1目錄不存在 這種情況就會出錯 scp: /path1/path2/test1/folder: No such file or directory
引用 6 樓 steptodream 的回復:ssh [email protected].*.* "@mkdir /a" --------- 這樣也是沒問題的 但是你這個username要有在/下創建文件夾的許可權才可以。 這個SSH命令也可以用 runSSH() 這個方法執行嗎
引用 10 樓 guofc_presoft 的回復:恩 我 用其他的方法 public static void scpPut(String host, String username, String password, String localFile, String remoteDir) throws IOException { if (logger.isDebugEnabled()) { logger.d…… 調用這個方法,如何判斷沒有文件夾的時候,把文件夾給建立起來啊 ! 各位!
你這樣在程序里弄 我也沒弄過 直接使用scp會自己創建文件夾 我上面都測試了
引用 3 guofc_presoft 的回復:調用的是下面的方法 public static int runSSH(String host, String username, String password, String cmd) throws IOException { if (logger.isDebugEnabled()) { logger.debug("runnin…… 調用這個方法之後 line 返回NULL值是什麼意思啊 下面的這幾行代碼是做什麼用的呢 跟我 執行 COPY 文件的操作也沒關系把 String line = br.readLine(); if (line == null) break; if (logger.isDebugEnabled()) { logger.debug(line); }