Для получения подробной информации о строительстве среды Hadoop, пожалуйста, смотрите эту статью //www.vevb.com/article/33649.htm.
Мы уже знаем, что Hadoop можно вызвать через командную строку через форму hadoop jar ***. Входной вывод JAR, так как вы включите ее в сервис и позволите Java/Web назвать его? Это позволяет пользователям загружать файлы в Hadoop удобным образом и обрабатывать их для получения результатов. Во -первых, ***. JAR - это инкапсуляция класса задач Hadoop. Мы можем запустить основной метод класса без банки и передать необходимые параметры. Ввод и вывод Поместите файл, загруженный пользователем в файловую систему Hadoop с использованием Javaapi Hadoop. Затем используйте Java API Hadoop, чтобы получить файл результата из файловой системы.
Создайте проект Javaweb. В этой статье используются фреймворки Spring, Springmvc и Mybatis. Конечно, это не главное, и это может быть достигнуто даже без использования каких -либо структур.
Проектная структура заключается в следующем:
Пакеты JAR, используемые в проекте, следующие:
В файле конфигурации пружины добавьте
<bean id = "multiartresolver"> <name = "defaultEncoding" value = "UTF-8" /> <name = "maxUploadSize" value = "10485760000" /> <name = "maxInmemorySize" value = "40960" /> < /> bean> "
Сделайте загрузку файла поддержки проекта.
Создайте новый login.jsp Нажмите, чтобы войти в систему и ввести пользователь/вход
Процесс входа в пользователь/логин. После успешного входа в систему [создать пользовательскую папку в файловой системе Hadoop, а затем перейдите на console.jsp
пакет com.chenjie.controller; импортировать java.io.ioexception; Импорт javax.annotation.resource; Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpservletresponse; Импорт org.apache.hadoop.conf.configuration; Импорт org.apache.hadoop.fs.filesystem; Импорт org.apache.hadoop.fs.path; Import org.springframework.sterotype.controller; Импорт org.springframework.web.bind.annotation.requestmapping; Импорт com.chenjie.pojo.jsonresult; Импорт com.chenjie.pojo.user; Импорт com.chenjie.service.userservice; Импорт com.chenjie.util.appconfig; Импорт com.google.gson.gson; /** * Контроллер запросов пользователя * * @author chen * */@controller // Объявляет текущий класс как контроллер @requestmapping ("/user") // Объявление пути текущего класса открытого класса usercontroller {@resource (name = "userservice») @param request * @param response * @trows ioexception */@requestmapping ("/login") // Объявление пути текущего метода публичного входа в строки (пользователь пользователь, httpservletrequest, httpservletresponse userservice.login (user); // вызовать метод входа в систему userservice request.getsession (). setattribute ("user", result); if (result! = null) {createhadoopfsfolder (result); вернуть "консоль"; } вернуть "логин"; } public void createHadoopfsFolder (пользователь пользователя) бросает ioException {configuration conf = new Configuration (); conf.addresource (новый путь ("/opt/hadoop-1.2.1/conf/core-site.xml")); conf.addresource (новый путь ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); Fileystem filesystem = fileystem.get (conf); System.out.println (fileystem.geturi ()); Path file = new Path ("/user/" + user.getu_username ()); if (fileystem.exists (file)) {System.out.println ("Haddop HDFS Пользователь Foler."); fileystem.delete (файл, true); System.out.println («Пользователь Haddop HDFS Foler удаляет успех»); } fileSystem.mkdirs (file); System.out.println ("Haddop HDFS пользователь Foler Creat Success."); }}Console.jsp для загрузки файлов и отправки задач,
Загрузка файла и подача задачи:
пакет com.chenjie.controller; Импорт java.io.file; импортировать java.io.ioexception; Импорт java.net.inetsocketAddress; Импорт java.net.uri; импортировать java.util.arraylist; импортировать java.util.iterator; импортировать java.util.list; Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpservletresponse; Импорт org.apache.hadoop.conf.configuration; Импорт org.apache.hadoop.fs.fsdatainputstream; Импорт org.apache.hadoop.fs.filesystem; Импорт org.apache.hadoop.mapred.jobclient; Импорт org.apache.hadoop.mapred.jobconf; Импорт org.apache.hadoop.mapred.jobid; Импорт org.apache.hadoop.mapred.jobstatus; Импорт org.apache.hadoop.mapred.runningJob; Импорт org.springframework.steretype.controller; Импорт org.springframework.web.bind.annotation.requestmapping; Импорт org.springframework.web.multipart.multipartfile; Импорт org.springframework.web.multipart.multiparthttpservletrequest; Импорт org.springframework.web.multipart.commons.commonsmultipartresolver; Импорт com.chenjie.pojo.user; импорт com.chenjie.util.utils; @Controller // Объявляет текущий класс как контроллер @requestmapping ("/hadoop") // Объявление пути текущего класса открытого класса Hadoopcontroller {@requestmapping ("/upload") // Объявление пути текущего метода // upport upput string upload (httpserveltrequest chestressev fileList = (list <string>) request.getSession () .getAttribute ("filelist"); // Получить список файлов, загруженных пользователем if (filelist == null) filelist = new ArrayList <string> (); // Если список файлов пуст, создайте новый пользователь user = (user) request.getSession (). if (user == null) return "login"; // Если пользователь не вошел в систему, перейдите на страницу входа в систему CommonsmultiparTresolver multipresolver = new commonsmultipartresolver (request.getSession (). geterVletContext ()) ;/ // Получить компонент загрузки файла), если (MultipartREPOR, IR (MultipRESOL. IMPRESOLPOR. Запрос - это запрос файла MultiparThttpServletRequest multirequest = (MultiparthttpservletRequest) запрос; Iterator <string> iter = multirequest.getFilenames (); // Получить итератор файла iterator while (iter.hasnext ()) {multipartfile file = multirequest.getFile ((string) iter.next ()); if (file! = null) {string filename = file.getoriginalfilename (); File folder = new File ("/home/chenjie/cjhadooponline/" + user.getu_username ()); if (! folder.exists ()) {folder.mkdir (); // Если файл не существует, создайте локально на сервере} string path = "/home/chenjie/cjhadooponline/" + user.getu_username () + "/" + filename; File localfile = new File (path); file.transferto (localfile); // Скопировать загруженный файл в локальный каталог сервера // filelist.add (path); } handleuploadFiles (user, filelist); // обрабатывать файл загрузки}} request.getSession (). setattribute ("filelist", filelist); // Сохранить загруженный список файлов в сеансе return "console"; // return console.jsp для продолжения загрузки файла} @requestmapping ("/wordcount") ///1 WordCount (httpservletRequest -запрос, httpservletresponse response) {System.out.println ("Ввод контроллер WordCount"); User user = (user) request.getsession (). Getattribute ("user"); System.out.println (пользователь); // if (user == null) // return "login"; Wordcount c = new wordcount (); // new Word Statistics task string username = user.getu_username (); String input = "hdfs: // chenjie-virtual-machine: 9000/user/" + username + "/wordcountinput"; // указать папку ввода системной системы hadoop file output = "hdfs: // chenjie-virtual-machine: 9000/" + username + "/WordCountOutput" ;/ // spectify the network reslest letry-letry-netry-strescout styster styster styster stour of the net stystr letry-strescourt letry-letry-strescount stystr + "/part-r-00000"; // выходной файл по умолчанию try {thread.sleep (3*1000); C.main (New String [] {input, output}); // Вызовите слово «Статистика конфигурации задачи conf = new Configuration (); // Создать новую конфигурацию Hadoop conf.Addresource (новый путь ("/opt/Hadoop-1.2.1/conf/core-site.xml "); // Добавить конфигурацию Hadoop и найти информацию Hadooop Deplocment Information (newresource (newresource (newresource (newarddresour (newresource (newresource (newresource (newresource (newarddresource (newresource (ned Path ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); // конфигурация Hadoop и найти файловую систему файловой системы файловой системы = файловая система. file.touri (); // Получить систему выходного файла. System.out.println (uri); String Data = null; while ((data = instream.readline ())! = null) {//system.out.println(data); response.getOutputStream (). println (data); // Написать файл результата обратно на веб -страницу пользователя} // inputStream in = fileSystem.open (file); // outputStream out = new FileOutputStream ("result.txt"); // ioutils.copybytes (in, out, 4096, true); instream.close (); } catch (Exception e) {System.err.println (e.getMessage ()); }} @Requestmapping ("/mapReducestates") // Получить состояние mapReduce public void mapReduce (httpservletrequest, httpservletresponse response) {float [] progress = new float [2]; try {configuration conf1 = new configuration (); conf1.set ("mapred.job.tracker", utils.jobtracker); JobStatus JobStatus = utils.getJobstatus (conf1); // while (! // response.getOutputStream (). // Thread.sleep (1000); //} JobConf JC = новый JobConf (conf1); JobClient JobClient = новый JobClient (JC); Jobstatus [] jobsstatus = jobclient.getalljobs (); // Таким образом, вы получаете массив JobStatus, и вы можете просто взять элемент и назвать его JobStatus jobStatus = jobsstatus [0]; Jobid jobid = jobstatus.getjobid (); // Получить Jobid через JobStatus rongjob rongjob = jobclient.getjob (jobid); // Получить runningjob object rongjob.getjobstate () через Jobid; // Вы можете получить статус работы, есть пять состояний, а именно jobstatus.failed, jobstatus.kild, jobstatus.prep, jobstatus.running, jobstatus.sucteded obstatus.getusername (); rongjob.getJobname (); // Вы можете получить имя работы. jobstatus.getStarttime (); // Вы можете получить время начала работы, которое является количеством Milliseconds UTC. float map = rongjob.mapprogress (); // Вы можете получить соотношение завершенной стадии карты, 0 ~ 1, system.out.println ("map =" + map); float ument = rongjob.reduceprogress (); // Вы можете получить соотношение завершенной стадии снижения. System.out.println ("уменьшить ="+уменьшить); rongjob.getfailureinfo (); // может получить информацию о сбое. rongjob.getCounters (); // Вы можете получить связанные с работой счетчики. Содержание счетчика такое же, как и значение счетчика, указанного на странице мониторинга заданий. } catch (ioException e) {progress [0] = 0; Прогресс [1] = 0; } request.getSession (). setattribute ("map", progress [0]); request.getSession (). setAttribute ("уменьшить", прогресс [1]); } // Загрузить файл процесса upublic void handleuploadFiles (пользователь пользователя, список <string> filelist) {file folder = new File ("/home/chenjie/cjhadooponline/" + user.getu_username ()); if (! folder.exists ()) return; if (folder.isdirectory ()) {file [] files = folder.listfiles (); для (файл файла: файлы) {system.out.println (file.getName ()); try {putfileToHadoopFsFolder (пользователь, файл, fileList); // загрузить один файл в файловую систему Hadoop} catch (ioException e) {System.err.println (e.getMessage ()); }}}} // Загрузить один файл в файловую систему Hadoop Private void putfileTohAdoopFsFolder (пользователь пользователя, файл файла, список <string> fileList) Throws IOException {configuration Conf = new Configuration (); conf.addresource (новый путь ("/opt/hadoop-1.2.1/conf/core-site.xml")); conf.addresource (новый путь ("/opt/hadoop-1.2.1/conf/hdfs-site.xml")); Fileystem filesystem = fileystem.get (conf); System.out.println (fileystem.geturi ()); Path localfile = new Path (file.getabsolutePath ()); Path foler = new Path ("/user/" + user.getu_username () + "/wordcountinput"); if (! fileystem.exists (foler)) {fileystem.mkdirs (foler); } Path hadoopfile = new Path ("/user/" + user.getu_username () + "/wordcountinput/" + file.getName ()); // if (fileystem.exists (hadoopfile)) {// system.out.println ("file существует."); //} else {// fileystem.mkdirs (hadoopfile); //} fileystem.copyfromlocalfile (true, true, localfile, hadoopfile); filelist.add (hadoopfile.touri (). ToString ()); }}Начать Hadoop:
Результаты работы:
Вы можете войти в адрес проекта, загружать файлы и получить результаты на любой платформе.
Успешно бежать.
Исходный код: https://github.com/tudoupaisimalingshu/cjhadooponline
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.